我有一个代码,我必须读取整数,直到用户给出一个字符串“q”然后显示并用它们做东西。我必须一次又一次地重复,直到用户想要。我们可以使用cin.clear()
清除错误标记。问题是尝试读取int失败后(用户给出了q)它没有读取输入并给下一个输入提供了一些任意输入。这里的代码归结为必要的东西:
#include <iostream>
using namespace std;
int main(){
// Declare the variables
int x,y;
// Read the wrong input - setting error flag
cin >> x; // Give a string as input for eg. - "q"
// Without the quotes obviously
// Clear the error flag
cin.clear();
// Try to read again and display
cin >> y; // Error!! Does not read input and
cout << y << endl; // Displays 0
return 0;
}
如果我添加更多变量,它会提供一些随机的东西,如4309712,-1241221等。这里发生了什么?为什么cin.clear()
没有工作?
-------------- Build: Debug in Competition (compiler: GNU GCC Compiler)---------------
mingw32-g++.exe -Wall -fexceptions -g -std=c++14 -c D:\CP\Competition\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -o bin\Debug\Competition.exe obj\Debug\main.o
Output file is bin\Debug\Competition.exe with size 1.05 MB
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
IDE 代码块16.01
答案 0 :(得分:0)
调用clear
不会从流中删除错误的输入。
您应该在ignore
之后使用clear
删除不必要的字符。
E.g:
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),' ');
另请参阅references