此循环正在执行比预期更多的迭代

时间:2010-11-22 20:32:37

标签: c++

我遇到以下代码问题。我期望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

5 个答案:

答案 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在循环实际结束之前读取空字符串。