cin.clear()不工作 - 不读取输入

时间:2016-05-28 07:07:13

标签: c++ input io cin

我有一个代码,我必须读取整数,直到用户给出一个字符串“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

1 个答案:

答案 0 :(得分:0)

调用clear不会从流中删除错误的输入。 您应该在ignore之后使用clear删除不必要的字符。 E.g:

 cin.clear();
 cin.ignore(std::numeric_limits<streamsize>::max(),' ');

另请参阅references