永发信息网

c++ 怎么判断是否文件结尾

答案:2  悬赏:10  手机版
解决时间 2021-02-08 18:29
文件中的数据是不定长的数据块,用子函数读取一个数据块,在main函数中用while(!file.eof())来循环,这却造成无限的循环,应该是读取的数据块直接超过了文件结尾标识符,请问怎么判断下一个字节是文件结尾,而且不会改变下次读取的数据准确性
最佳答案
c++里面用file.eof()来控制循环的做法,是一个不好的行为。 因为它是一种后知后觉的方式, 也就是说如果文件没有打开, 或者文件个格式有问题, 比如尾部都多出个空格, 由于file.eof()只是检测标记, 而上述情况,标记没有被设置, 因此就会继续执行。

解决的方法有很多, 比如先读一下, while (getline(...)) {....} , 按你的情况, 其实应该在ReadGroup()里面作检测, 如果不愿意修改ReadGroup(), 有一个代价最小的做法:
//前提, 你的file是ifstrem的。

std:string line;

while (file >> line)
{
file.push_back(line);

ReadGroup();
....

}

说实话, 对循环读这种方式, 尽量做到每次读多少个字节。 然后比较具体读出的字节数, 和期待值作比较, 就能发现问题。 即便要读到一个数据结构里面, C++的方式, 也应该封装到class里, 重载<<或>>。
全部回答
while(!cin.eof())并没有错吧,我的机器上能通过,只不过这个程序会无限循环。while(cin>>a>>b)这句和上面那句是一样的结果。while(cin>>n)表示的是判断cin类中的三个状态位,只要其中的三个状态位之一,被设置就反回true。 下面是c++中具体的关于cin的错误检测机制,希望对你有帮助 使用cin进行输入:cin是类istream的对象。对于cin输入,它将跳过空白(空格,换行符和制表符)直到遇到非空白字符,cin将读取从非空白字符到与目标类型不匹配的第一个字符之间的全部内容。比如有cin<>a;其中a是int型变量,如果这时输入一个字符d,则会出现设置流状态failbit位,这可以通过调用good()函数来测试,这时对后面的输入将会关闭,也就是说如果cin>>a;后面还有一句cin>>b;则语句cin>>b将不会执行。 d、如果希望程序在流状态位被设置后能够读取后面的输入,则必须将流状态重置为良好。这可以使用clear()方法来实现。比如cin>>a; cin.clear(); cin>>b;其中变量a是整型。这时如果输入一个字符d语句cin>>a将使程序设置failbit位,语句cin.clear()将状态位failbit位清除,接着执行语句cin>>b,这时会发现程序cin>>b;没有提示输入,这是为什么呢?原因就在于虽然使用clear()函数重置了流状态,但是不匹配的输入仍然留在输入队列中,下一次输入就将从这里读起,而不会提示用户输入内容,而是从输入流中直接提取,也就是说字符d会直接赋给变量b;如果变量b是字符型的话则接收他,并把字符d赋给b,这里不会提示输入变量b的值,这不是我们所预期的。如果变量b是整型变量的话,则cin>>b又将是错误的。怎样能在第一次输入错误后让系统提示用户为以后的输入语句输入内容呢?方法就是使用一个函数来一直读取输入流中的字符直到达到空白为止,这可以使用isspace()函数和ignore()函数来实现,下面将具体介绍。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天利交通职业培训地址好找么,我有些事要过去
张店区傅家镇劳动人事争议调解中心这个地址在
【遮蔽的拼音】繁杂、烦闷、徘徊、遮蔽、覆盖
欢心教育地址好找么,我有些事要过去
“一张纸尚且有多种命运。“请你仔细读读课文
三星SMJ5008能刷机用联通4G卡吗?
当天空中的云量不超过4分之1是什么天气
诸城市密州街道繁荣居民委员会地址有知道的么
圆方书法学堂地址有知道的么?有点事想过去
什么样的小宠物适合饲养在南方?比如重庆?
本人十七岁了。牙有些不整齐想整牙,但是拍了
儿童发烧38.6 然后呕吐,是什么原因
我喜欢一个女生,她有一个智障叔叔,我朋友知
爱贝国际少儿英语(漳州龙文区)地址在什么地方
塔色赫当这个地址在什么地方,我要处理点事
推荐资讯
茉莉花有了红蜘蛛怎么办?应该用什么药 ?最
吉祥馄饨阜阳燕莎店这个地址在什么地方,我要
lunacafe怎么去啊,我要去那办事
莱芜李记羊汤在什么地方啊,我要过去处理事情
肉眼如何区别二元猪和三元猪
岫岩满族自治县新甸镇合顺社区居民委员会我想
【小笠原群岛地震】北京时间2010年11月30日日
袂花三帝庙在什么地方啊,我要过去处理事情
御致茗方养生茶室地址有知道的么?有点事想过
当一个女生对男生说你是一个值得信任的人。
悲晨曦之易夕 感人生之长勤取自哪里?
嘉欣建筑安装工程公司我想知道这个在什么地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?