从文件c ++读取时无限循环
infinite loop while reading from a file c++
虽然我在 while
条件下检查了 EOF,但 while 循环是 运行 无限次。但它仍然是 运行 无限次。下面是我的代码:
int code;
cin >> code;
std::ifstream fin;
fin.open("Computers.txt");
std::ofstream temp; // contents of path must be copied to a temp file then renamed back to the path file
temp.open("Computers.txt", ios_base::app);
string line;
string eraseLine = to_string(code);
while ( getline(fin, line) && !fin.eof() ) {
if (line == eraseLine)
{
/*int i = 0;
while (i < 10)
{*/
temp << "";
//i++;
//}
}
if (line != eraseLine) // write all lines to temp other than the line marked for erasing
temp << line << std::endl;
}
您在评论中声称 temp
应该引用一个临时文件,但事实并非如此。您使用 fin
.
打开您已经阅读的同一文件以进行追加
由于你在迭代循环的同时不断追加,文件中总会有新的东西被读取,导致无限循环(直到你运行 out disk space)。
为您的 temp
流使用不同的文件名,稍后重命名(如评论所述)。
也删除 && !fin.eof()
。它毫无用处。 while ( getline(fin, line) )
是处理逐行读取直到文件末尾的正确方法,请参见例如this question and this one.
虽然我在 while
条件下检查了 EOF,但 while 循环是 运行 无限次。但它仍然是 运行 无限次。下面是我的代码:
int code;
cin >> code;
std::ifstream fin;
fin.open("Computers.txt");
std::ofstream temp; // contents of path must be copied to a temp file then renamed back to the path file
temp.open("Computers.txt", ios_base::app);
string line;
string eraseLine = to_string(code);
while ( getline(fin, line) && !fin.eof() ) {
if (line == eraseLine)
{
/*int i = 0;
while (i < 10)
{*/
temp << "";
//i++;
//}
}
if (line != eraseLine) // write all lines to temp other than the line marked for erasing
temp << line << std::endl;
}
您在评论中声称 temp
应该引用一个临时文件,但事实并非如此。您使用 fin
.
由于你在迭代循环的同时不断追加,文件中总会有新的东西被读取,导致无限循环(直到你运行 out disk space)。
为您的 temp
流使用不同的文件名,稍后重命名(如评论所述)。
也删除 && !fin.eof()
。它毫无用处。 while ( getline(fin, line) )
是处理逐行读取直到文件末尾的正确方法,请参见例如this question and this one.