C++流位置和getline的问题 5C

C++primer第五版流随机访问部门的例程,然而有好多问题
先上代码

 #include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main(){
    fstream inOut("hello",fstream::ate|fstream::in|fstream::out);
     if(!inOut){
        cerr<<"Unable to open file!"<<endl;
        return EXIT_FAILURE;
     } 
     auto end_mark  =inOut.tellg();
     inOut.seekg(0,fstream::beg);
     cout<<"BEG"<< fstream::beg<<endl;
     cout<<"cur"<<fstream::cur<<endl;
     cout<<"end"<<fstream::end<<endl;
     size_t cnt = 0;
     string s;

     while(inOut&&inOut.tellg()!=end_mark&&getline(inOut,s)){
        cout<<s<<endl;
         auto mark = inOut.tellg();
        cnt += (s.size()+1);//+1表示换行符

        inOut.seekp(0,fstream::end);
        inOut<<cnt<<","<<mark;
        if (mark!=end_mark) inOut<<" ";
        inOut.seekg(mark);
     }
     inOut.seekp(0,fstream::end);
     inOut<<"\n";
     //上面是原例程,下面是为了看文件内容加的
     string temp;
     inOut.seekg(0,fstream::beg);
     while(getline(inOut,temp)){
        cout<<temp<<","<<inOut.tellg()<<endl;
     }

    return 0;
}

再上文件内容:
abcd
efg
hi
j

再上结果
图片说明

跟书上的结果完全不一样啊,程序本来应该删除每一行末跟初始位置的相对位置的(书上是5 9 12 14),但是我的完全不对啊
分析下我的结果(为了研究getline我在开头加了一个换行,后面细说)
因为我运行了好几次所以最下面有三行
三行数字中,逗号前面的数字是应该要输出的,第一次运行结果可以看到是1 2 3 4,这非常明显是上面我手动增加的1,也就意味着在读取第一个换行以后,getline读到的内容长度都是0(但是它又能进循环),第二次跳过直接看第三次,这次他在第二次getline读到了fg所以增加了3,后面同理。。
输出了一下我发现问题是处在哪个getline的流位置上,由数据可以看出来除了第一个的位置比较奇怪后面的都是按照哪个相对值进行递增的,所以现在最大是问题也就在那个getline的流位置
每次运行第一个getline的流位置都不一样且递增
明明只有一个换行为什么返回的位置有这么大的值
还有就是几乎以同样的操作读文件上面的例程出现了问题而我在下面读取并输出文件内容的时候没问题(问题出在那个mark吗,可我是按例程敲的)
还有我发现用完getline(inOut,s)再看gcount值是0的,然后查了一下他的这个重载形式是在string头文件里的,所以不会计算它的输入个数是吗?
还有就是那个fstream::end为什么始终是2啊,是不能这样输出吗
研究了一晚上了,好痛苦,求大神解答。

有描述不清的请指出

2个回答

还有就是那个fstream::end为什么始终是2啊,是不能这样输出吗

fstream::end 是系统定义的,始终是 2 有什么问题?
书上的答案你验证不正确,请你:
1 先再详细的对一个你输入的代码是否是书上的完全一致;
2 输入数据的格式,也需要注意。

viggo96
viggo96 代码是一致的就是mark那个地址,操作完再返回那个位置继续操作。。输入格式方面windows的文本回车是\n+\r的,但是还是不能解决我的问题
接近 4 年之前 回复
viggo96
viggo96 end表示流的末尾,但是始终不变,也就是它存的并不是pos_type类型的位置,是这样吗?
接近 4 年之前 回复
viggo96
viggo96 end表示流的末尾,但是始终不变,也就是它存的并不是pos_type类型的位置,是这样吗?
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++流位置和getline的问题
-
关于c++中getline函数是否会读入换行符的问题
-
getline怎么从流的第一行开始读起?
-
getline输入问题,求大神解答!!!!
-
C++ 整型数组连续输入
-
c++文件流中想要删除文本文件中的某些字符串,为什么下面的代码删除那部分无法运行出来?
-
C++萌新提问,关于C++的cin流
-
关于c++输入流的问题,百度后仍然无法解决我的问题
-
C++,huffman树编码的压缩软件输出到txt的问题
-
string流操作不能和cin操作混用吗?
-
关于pcap_dump_close出现Segmentation fault
-
c++ 文件输入输出流 无法输入 代码如下(真心求急救)
-
C++对Spring类进行replace操作报错问题
-
新手求助,fstream中出错,endwrite函数中异常:读取访问权限冲突
-
docker学习笔记
docker学习笔记 Docker是什么? Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。 Docker官方文档比较全,建议有能力的读...
学会了这些技术,你离BAT大厂不远了
每一个程序员都有一个梦想,梦想着能够进入阿里、腾讯、字节跳动、百度等一线互联网公司,由于身边的环境等原因,不知道 BAT 等一线互联网公司使用哪些技术?或者该如何去学习这些技术?或者我该去哪些获取这些技术资料?没关系,平头哥一站式服务,上面统统不是问题。平头哥整理了 BAT 等一线大厂的必备技能,并且帮你准备了对应的资料。对于整理出来的技术,如果你掌握的不牢固,那就赶快巩固,如果你还没有涉及,现在...
程序员实用工具网站
目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、应届生招聘 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站 9、项目开源 10、在线工具宝典大全 程序员开发需要具备良好的信息检索能力,为了备忘(收藏夹真是满了),将开发过程中常用的网站进行整理。 1、搜索引擎 1.1、秘迹搜索 一款无敌有良心、无敌安全的搜索引擎,不会收集私人信息,保...
2019年9月中国编程语言排行榜
2019年9月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 排名 编程语言 百分比 1 java 33.71% 2 cpp 15.95% 3 c_sharp 12.72% 4 javascript 12.70% 5 python 7.63% 6 go 7.37% 7 php 4.66% ...
shell-【技术干货】工作中编写shell脚本实践
在公司项目的开发过程中,需要编写shell脚本去处理一个业务,在编写过程中发现自身对shell脚本的知识不够完善,顾整理一下,本文章主要内容来自菜鸟教程 , 也添加了一些知识点 shell脚本? 在说什么是shell脚本之前,先说说什么是shell。 shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls...
挑战10个最难的Java面试题(附答案)【上】
这是收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。 1 为什么等待和通知是在 Object 类而不是 Thread 中声明的? 一个...
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
别再翻了,面试二叉树看这 11 个就够了~
写在前边 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当我去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很多边界条件想不全面,一紧张,代码写的乱七八糟。如果遇到没有做过的算法题,思路也不知道从何寻找。面试吃了亏之后,我就慢慢的做出总结,开始分类的把数据结构所有的题型和解题思路每周刷题做出的系统性总结写在了 Github...
GitHub开源的10个超棒后台管理面板
目录 1、AdminLTE 2、vue-Element-Admin 3、tabler 4、Gentelella 5、ng2-admin 6、ant-design-pro 7、blur-admin 8、iview-admin 9、material-dashboard 10、layui 项目开发中后台管理平台必不可少,但是从零搭建一套多样化后台管理并不容易,目前有许多开源、免费、...
100 个网络基础知识普及,看完成半个网络高手
欢迎添加华为云小助手微信(微信号:HWCloud002或HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群;输入关键字“最新活动”,获取华为云最新特惠促销。华为云诸多技术大咖、特惠活动等你来撩! 1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
C语言实现推箱子游戏
很早就想过做点小游戏了,但是一直没有机会动手。今天闲来无事,动起手来。过程还是蛮顺利的,代码也不是非常难。今天给大家分享一下~ 一、介绍 开发语言:C语言 开发工具:Dev-C++ 5.11 日期:2019年9月28日 作者:ZackSock 也不说太多多余的话了,先看一下效果图: 游戏中的人物、箱子、墙壁、球都是字符构成的。通过wasd键移动,规则的话就是推箱子的规则,也就不多说了。 二、代...
面试官:兄弟,说说基本类型和包装类型的区别吧
Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 4 点。
一些实用的GitHub项目
最近整理了一些在GitHub上比较热门的开源项目关于GitHub,快速了解请戳这里其中涵盖了:学习教程,面试总结,实用工具,框架,机器学习等东西比较杂,要学的东西也比较多...
新手程序员成长之路的五本必读书籍(附资源下载)
全文共3351字,预计学习时长7分钟图片来自Pixabay,IvanPais书籍可以清晰而有条理地陈诉观点,纸张上的笔墨也会给人一种不慌不忙的感觉。不过,科技类书籍存在一...
30秒内便能学会的30个超实用Python代码片段
许多人在数据科学、机器学习、web开发、脚本编写和自动化等领域中都会使用Python,它是一种十分流行的语言。 Python流行的部分原因在于简单易学。 本文将简要介绍30个简短的、且能在30秒内掌握的代码片段。 1. 唯一性 以下方法可以检查给定列表是否有重复的地方,可用set()的属性将其从列表中删除。 ...
python入门的120个基础练习
python入门的120个基础练习 解决问题的道路上,"方法"和"坚持"缺一不可。 ------------------------------------------------------------------------------------------ 01-Hello World python的语法逻辑完全靠缩进,建议缩进4个空格。 如果是顶级代码,那么必须顶格书写,哪怕只有一个空格...
JAVA-快速了解线程池的基本原理
前言 说起线程池大家肯定不会陌生,在面试中属于必问的问题之一,特别是对于高并发有较高要求的企业,基本是核心打分点。网上关于线程池的文章和视频很多,本篇文章旨在帮助大家快速了解和掌握线程池的原理,对于高级应用不过多涉及。 ...
失败程序员的十年总结
十年到底有多长?当我回顾过去的十年,发现好短,可以讲的事情没有几件,而且都是坏事;当我畅想未来的十年,感觉又好长,不知道路怎么走。
Python搭建代理IP池(一)- 获取 IP
使用爬虫时,大部分网站都有一定的反爬措施,有些网站会限制每个 IP 的访问速度或访问次数,超出了它的限制你的 IP 就会被封掉。对于访问速度的处理比较简单,只要间隔一段时间爬取一次就行了,避免频繁访问;而对于访问次数,就需要使用代理 IP 来帮忙了,使用多个代理 IP 轮换着去访问目标网址可以有效地解决问题。 目前网上有很多的代理服务网站可以提供代理服务,也提供一些免费的代理,但可用性较差,如果需...
可视化越做越丑?这五个高级图表效果能瞬间抬升你的逼格
今天我们来说一说数据可视化,想必很多人在入门数据分析之后,就会经常进行可视化的工作,所谓一图胜千言,图表用的好,真的是会事半功倍的。但现实情况下,很多人遇到的问题是: 你做的图表太丑了?你做的图表到底想表达什么?图表太多,该用哪一个更好呢? 很多人看着下面这些高级上档次的数据可视化都觉得羡慕,但是到自己动手的时候又不知从何下手,或者实现难度太大,只能“望图兴叹”。 其实我...
感觉自己不会的东西太多了,不知道如何下手?
GitHub 8.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 8.8k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 8.8k Star 的Java工程师成神之路 ,真的确定不来了解一下吗? 如果让我统计下,粉丝问我做多的问题是什么,这个问题肯定可以排前5,问出这个问题的朋友们遍布各个年龄段。 实话说,这个问题同样也困扰过我,大概就是我刚...
别死写代码了,方法比结果更重要
点击上方“程序猿技术大咖”,选择“关注公众号”,一起共进步!如果每个程序开发人员都只是周而复始地写代码,想必编程的工作就会让很多程序员发狂。那么如何在枯燥的工作中寻找乐趣...
为什么程序员在学习编程的时候什么都记不住?
在程序员的职业生涯中,记住所有你接触过的代码是一件不可能的事情!那么我们该如何解决这一问题?作者 |Dylan Mestyanek译者 | 弯月,责编 | 屠敏出品 |...
成长的第一步是走出舒适区
阅读本文大概需要 2.8 分钟。在温室里呆习惯了,就很难去适应室外环境,在一个圈子呆久了,就会把一切都会当成是理所当然,不想再去适应第二个圈子,即使他们可能更好。很多人觉...
记录一次九月份腾讯 Android 面试笔试总结(面试题详细答案解析)
今天把之前九月份腾讯面试笔试题目整理出来给大家分享分享,还附上了我自己的一些答案解析,给大家参考下,希望能对大家有帮助。 面试题目录 Activity中的几种启动模式 Android消息机制 IntentService 事件分发 Android性能优化、内存优化 内存优化 View的绘制 Eventbus原理 Rxjava的操作符有哪些,说说他们的作用 线程锁 锁方法...
相关热词 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率 c#教学 csdn c#开发前端 c#如何将字符串格式化 c#引用dll不成功