Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 文件指针卡在无限循环中_C++_Loops_Io_Infinite - Fatal编程技术网

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他已经烦了我好几个小时了