我尝试从用户输入到空行 所以我写了这个:
while (c != '\n')
{
c = cin.peek();
cin >> check;
if (check == "Test")
{
cin >> ID >> One >> Two >> Three;
Test[i++] = Test(ID, One, Two, Three);
}
}
例如,我现在从用户测试12 45 56 78 99,check = test,id = 45,one,56,two = 78,three = 99 当我输入空行时,为什么while循环没有停止?
答案 0 :(得分:2)
目前尚不清楚你要做什么;你不要使用
cin.peek()
的结果,直到很久以后,完成后
显着更多的输入,而无需测试它是否成功
或不。鉴于代码,我的第一个问题是:你明白吗?
while
如何运作?修改控制变量的值
在循环内不会导致你突破循环;该
测试仅在循环的顶部完成。你必须总是
在使用变量之前验证输入是否成功
你输入了。
如果您的输入是面向行的,那么经典的解决方案就是 是:
std::string line;
while ( std::getline( std::cin, line ) && !isEmpty( line ) ) {
std::istringstream parser( line );
if ( parser >> check >> ID >> One >> Two >> Three >> std::ws
&& parser.get() == EOF ) {
// Data is good, can be used...
} else {
// Some sort of format error in the line...
}
}
我把测试空行放在一个单独的函数中,
因为你可能想要只用空格处理一条线
空的。 (用户可能会不小心碰到空格键
进入,他们看到的仍然看起来像一条空行。)
这也是我在检查之前>>
进入std::ws
的原因
解析时,行末没有垃圾。
答案 1 :(得分:1)
cin >> check;
是一个格式化的输入函数,这意味着它将丢弃前导空格。空行只是前导空格,它将被丢弃,提取操作符将继续读取,直到非空白数据到达,或发生I / O错误。