gpt4 book ai didi

c++ - cin 缓冲区没有被忽略?

转载 作者:行者123 更新时间:2023-11-28 05:28:33 25 4
gpt4 key购买 nike

while(cout << "Enter a positive integer: " &&
(!(cin >> anInteger) || anInteger < 0))
{
cout << "Enter a positive integer.\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

while(cout << "Read or write (r/w): " &&
(!(cin >> rw) || (rw != 'r' && rw != 'w')))
{
cout << "Enter r or w.\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

这里我要求输入一个整数,后跟“r”或“w”。但是,当在第一个 while 语句中输入类似“4r”的内容时,“r”保留在缓冲区中并应用于下一个 while 语句。我该如何解决这个问题?

只有在第一个 while 循环中输入的是所有整数而不是截断字符时,最简单的方法是什么?

最佳答案

您可以只ignore() 整数后一行的内容:当读取整数时,读取在第一个不适合整数的字符处停止,即不会读取以下换行符.

考虑到您在多个地方忽略字符直到行尾,创建并使用操纵器来执行此操作可能是合理的:

std::istream& igln(std::istream& in) {
return in.ignore(std::numeric_limits<std::streamsize>::max());
}
...
while (std::cout << "Read or write (r/w): "
&& (!(std::cin>> igln >> rw) || (rw != 'r' && rw != 'w')) {
std::cout << "Enter r or w!\n";
if (std::cin.eof()) {
throw std::runtime_error("reached end of stream\n");
}
std::cin.clear();
}

请注意,循环总是忽略该行的其余部分,因此在循环内不需要它。

关于c++ - cin 缓冲区没有被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40025687/

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