【发布时间】:2010-11-24 03:13:55
【问题描述】:
我在我的程序中执行了以下for 循环,但我看不出它的设计与我收到的输出有何关联。
cout << no_of_lines << endl;
for (int count = 0; count < no_of_lines + 1; count ++)
{
getline(Device, line, '=');
cout << line << endl;
}
这是输出:
3
DeviceName
GPU
Manufacturer
Intel
GraphicalRam
128MB
这是设备列表文件
DeviceName=GPU
Manufacturer=Intel
GraphicalRam=128MB
在循环中,no_of_lines 指的是文件中的行数,在本例中为 3。我提供此输出以验证循环每行仅执行一次。谁能告诉我为什么这个循环执行的次数比预期的要多?我猜这是因为我将= 作为分隔符,并且循环在递增之前以某种方式执行了额外的时间,但是为什么它会在最后一行的分隔符上停止,需要我添加 1循环限制?
【问题讨论】:
-
根据cplusplus.com/reference/iostream/istream/getline,您的代码应为
DeviceList.getline(line, 255, '=');。我错过了什么吗? -
该输出与代码和输入不匹配。还有一些你没有向我们展示的东西。我们需要一个可编译的示例,当我们运行它时它会显示问题。我敢打赌,当你做这个例子时,你会解决你自己的问题。
-
@Mikhail:不。有一个 std::getline() 接受流、字符串和分隔符,这是你应该(通常)使用的(你的版本要求行更少大于缓冲区大小,如果不是,则很痛苦)请参阅:cplusplus.com/reference/string/getline