1
    int value(0);
    while (!(std::cin >> value)) { //THIS LINE RIGHT HERE IS BUGGING ME(am really a noob)
        cout << "you entered a non-digit character\n";
        cin.clear();
        cin.ignore();
    }

这只是阻止人们输入字母而不是数字,但我想知道它是如何做到的

4

4 回答 4

2

视为cin布尔值告诉您它是否处于故障状态。if ( cin )是 的简写if ( cin.ok() )。因此,只要输入流正常,在获取一些输入之后,循环就会继续。

获得错误的输入是进入失败状态的一种方式。要退出该状态,请调用clear(),并忽略违规输入,请调用ignore()。然后你可以再试一次,就像在这个循环中一样。

于 2013-10-02T23:18:23.033 回答
1

如果cin接收到的数据类型与 不兼容value,则基本上它返回为 false。

于 2013-10-02T22:43:09.630 回答
0

cin >> valuecin作为结果返回对象。并且它评估false好像用户输入的类型与特定的重载不匹配(在您的代码中,它是int),或者不能隐式转换为它。

于 2013-10-02T22:48:04.427 回答
0

cinistream是表示标准输入流的类对象。它对应于cstdiostdin

operator >>流的重载返回对同一流的引用,这可以通过转换运算符在布尔条件下truefalse基于流的内部状态进行评估。cin提供格式化的流提取。

操作

int value;
!(std::cin >> value)

如果输入数字值将失败,如果输入非数字值将返回 true。

    cin.clear(); // will reset the state of stream
    cin.ignore(); // ignore one or more characters
于 2013-10-02T22:49:11.540 回答