我遇到以下代码问题。我期望do-while
循环执行4次,对于它正在读取的文本文件的每一行执行一次,但实际上它执行了五次,这导致程序中稍后的段错误。我在这做错了什么导致它执行额外的迭代?我尝试用简单的do-while
循环替换他while
,但结果是一样的。
int count = 0;
string devices[4];
string line;
ifstream DeviceList;
DeviceList.open("devices/device_list.txt");
do
{
getline(DeviceList, line);
devices[count] = line;
count ++;
} while(!DeviceList.eof());
device_list.txt
包含以下内容:
WirelessAdaptor
GPU
CPU
Display
答案 0 :(得分:5)
我认为你的循环应该看起来更像这样:
编辑:添加了检查以忽略空行
while (getline(DeviceList, line))
{
if (line.length() > 0)
{
devices[count] = line;
++count;
}
}
答案 1 :(得分:1)
eof()在您尝试读取的数据超过剩余数据之前不会返回true。
答案 2 :(得分:1)
eof()
消耗结束之前, getline
不会返回true。在读取最后一行之后getline
调用之前,它不会执行此操作。您需要在eof
电话后立即检查getline
是否为真:
while(true)
{
getline(DeviceList, line);
if(DeviceList.eof())
break;
}
答案 3 :(得分:0)
在getline(DeviceList, line);
行上方插入cout << line.length() << endl;
并告诉我们会发生什么。
答案 4 :(得分:0)
您的文本文件可能在最后一行之后包含换行符,因此getline
在循环实际结束之前读取空字符串。