gpt4 book ai didi

c++ - 尝试在 cin,peek() 中使用

转载 作者:行者123 更新时间:2023-11-30 02:52:47 25 4
gpt4 key购买 nike

我尝试从用户输入到空白行所以我这样写:

while (c != '\n')
{
c = cin.peek();
cin >> check;
if (check == "Test")
{
cin >> ID >> One >> Two >> Three;
Test[i++] = Test(ID, One, Two, Three);
}
}

例如,我现在从用户 Test 12 45 56 78 99 得到,check=test, id=45, one, 56, two=78, three=99当我输入空行时,为什么 while 循环没有停止?

最佳答案

不清楚您要做什么;你不使用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解析时行尾没有垃圾。

关于c++ - 尝试在 cin,peek() 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18577448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com