C++ ifstream 在不存在文件时工作,在存在文件时不工作

C++ ifstream working when not existing file and not working if existing file

我写了一个代码,它运行完美。但 1 周后我再次打开它,我有一个非常有趣的问题,所以这里是:

ifstream file;
file.open("bemenet.txt");

int i = -1;

while (i < SOR)
{
    i++;
    file >> termekek[i].termek;
    file >> termekek[i].ara;
    file >> termekek[i].darab;


}

file.close();

在这种情况下 bemenet.txt 存在,程序已编译,当我尝试 运行 时:我得到错误代码:0xC0000005

另一种情况是 bemenet2.txt 不存在,该程序已编译并可以运行,但是当我想查看我从文件中获得的数据时,它 运行 会陷入无限循环。

你能帮帮我吗?我不知道我会做什么...

ifstream file;
file.open("bemenet.txt");

int i = 0;

while ((i < SOR) && file >> termekek[i].termek >> termekek[i].ara >> termekek[i].darab  )
{
    i++;
}

file.close();

while (file >> termekek[i].termek >> termekek[i].ara >> termekek[i].darab) 将测试您关心的几乎所有 IO 和转换条件——打开失败、文件结束、数据转换失败、各种 IO 读取错误——感谢 iostream' s 布尔运算符和 (i < SOR) && 防止溢出。注意 i 现在在读取之后和下一次测试之前递增,消除了允许 i 超过 SOR.

的差一错误的可能性

我会选择这样的东西:

ifstream file;
file.open("bemenet.txt");

TERMEK t ;
std::vector<TERMEK > termekek ;

while (file >> t.termek >> t.ara >> t.darab  )
    termekek.push_back(t) ;