after=nint(1000*before)/nint(1000*dx)
这里我要求一个整数,然后是' r'或者' w'。但是,当输入像' 4r'进入第一个while语句,' r'保持在缓冲区并应用于下一个while语句。我该如何解决这个问题?
如果第一个while循环中的所有整数而不是截断字符,那么只接受输入的最简单方法是什么?
答案 0 :(得分:1)
你可以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();
}
请注意,循环总是忽略该行的其余部分,因此,循环内部不需要它。