C++ 文件指针卡在无限循环中
嗨,伙计们,我似乎陷入了一个无限的循环中,我一辈子都不明白为什么会发生这种事 我正在读取一个我测试过的文件,确保C++ 文件指针卡在无限循环中,c++,loops,io,infinite,C++,Loops,Io,Infinite,嗨,伙计们,我似乎陷入了一个无限的循环中,我一辈子都不明白为什么会发生这种事 我正在读取一个我测试过的文件,确保personStart等于447,并且通过一些调试,我可以在.tellg()中确认等于7 它似乎是第一次运行,但在它打印了从8到447的所有索引之后,它陷入了一个无限循环,并继续打印-1(文件指针值) **编辑 当我删除第二个while循环时,它仍然可以正常工作并终止,因此第一个while循环没有问题(也不是重复的,也不知道为什么会被否决) 好了,伙计们,我会编辑问题和代码,这样它就完
personStart
等于447
,并且通过一些调试,我可以在.tellg()中确认
等于7
它似乎是第一次运行,但在它打印了从8
到447
的所有索引之后,它陷入了一个无限循环,并继续打印-1
(文件指针值)
**编辑
当我删除第二个while循环时,它仍然可以正常工作并终止,因此第一个while循环没有问题(也不是重复的,也不知道为什么会被否决) 好了,伙计们,我会编辑问题和代码,这样它就完整了,但我只是对这个问题很恼火,因为上面的问题对我一点帮助都没有,所以我创建了一个txt文件,可以使用索引随机访问。现在,我在尝试读取该txt文件时遇到了问题,我陷入了无限大的困境循环,我在嵌套的while循环中测试了其他代码,它运行得非常完美,如果有人能告诉我为什么会发生这种情况,以及这里的错误,我将不胜感激
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <sstream>
using namespace std;
int main()
{
vector<Person> people;
map<int,Index> index;
stringstream ss;
ifstream in;
in.open("randomAccess.txt");
int hello = 6;
while(!in.eof()){
string size;
getline(in,size,':');
string personStartString;
getline(in,personStartString,':');
int personStart;
ss << personStartString;
ss >> personStart;
ss.str(string()); // clear string stream
ss.clear();
while(in.tellg() < personStart){
string indexString;
getline(in,indexString,':');
int indexNumber;
ss << indexString;
ss >> indexNumber;
cout << in.tellg() << endl;
if ( in.fail() ){
cout << "failed" << endl;
}
}
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
媒介人;
地图索引;
细流ss;
如果输入;
in.open(“randomAccess.txt”);
int hello=6;
而(!in.eof()){
字符串大小;
getline(in,大小为“:”);
字符串personStartString;
getline(in,personStartString,':');
int personStart;
ss>personStart;
ss.str(string());//清除字符串流
ss.clear();
while(in.tellg()indexNumber;
cout您的代码使用我的
及
它永远循环的原因是第一个:您正在读取文件,但没有检查它是否有效。如果您的输入文件包含“1:2:3:4:5:6:7”
然后它有奇数个字段,因此您可以读取一个大小而不是personStart,然后进入内部循环,并且永远不会离开它,因为该循环中的所有I/O操作都会失败
不要在流中使用eof()
,这不是正确的条件。您应该检查输入操作是否成功,而不是是否已到达文件末尾(因为如果操作失败,流将进入失败状态,并且永远不会到达eof).当我删除第二个while循环时,它仍然可以正常工作并终止,因此第一个while循环没有问题(也不是重复的,也不知道为什么会被否决)我可以确认这不是重复运行代码,在.txt文件中使用以下输入1:2:3:4:5:6:7您自己运行代码问题仍然应该结束,因为您没有提供完整的程序(您在std
中使用的名称没有标题、没有main
、没有using
)这可能就是你被否决的原因。阅读并感谢Jonathan,我能在90分钟后再次发布问题吗,正确地使用标题等?因为这不是一个重复的问题,我的意思是它甚至与标记为重复的问题不接近。谢谢你可以编辑你的问题并修复代码。并添加一些结果。谢谢Jonathon,th他已经烦了我好几个小时了