gpt4 book ai didi

c++ - cin 将字符串的开头分配给 int,仅在第二次调用时失败

转载 作者:太空狗 更新时间:2023-10-29 21:16:20 25 4
gpt4 key购买 nike

在片段中

for(;;) {

std::cout << "Please enter an integer: ";
if(std::cin >> nInput) {
return nInput;
}
else {
std::cout << "Invalid input! Please enter an integer!\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

}

cin 会将字符串的开头分配给 nInput,前提是至少第一个字符是数字。例如,这是我的一些控制台输出:

Please enter an integer: 10
Please enter an integer: foo
Invalid input! Please enter an integer!
Please enter an integer: 20bar //this will return 20, leave "bar" in the stream. Until the next cin call, cin.good() returns true
Please enter an integer: Invalid input! Please enter an integer! //fails because "bar is in the stream"
Please enter an integer: -1

当用户输入“20bar”时,如何检查防止 cin 返回“20”?或者,如何检查 cin 缓冲区中的更多内容?

最佳答案

在这种情况下,您应该将数据读入 std::string,然后检查字符串以查看您是否有有效输入。 cin >> 非常满意 20anything_here 作为整数类型的输入,因为一旦找到非整数部分,它就会停止读取。

一旦您解析了字符串并确定它满足您的要求,您就可以使用 std::stoi将字符串转换为 int

关于c++ - cin 将字符串的开头分配给 int,仅在第二次调用时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35301679/

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