C++ cin>&燃气轮机;给定一个字符串,int将int赋值给0

C++ cin>&燃气轮机;给定一个字符串,int将int赋值给0,c++,cin,C++,Cin,我遇到的问题是,如果您输入任何字符串,cin会将int分配给0。一个有趣的发现是,如果以后将cin带到字符串中,则会得到为int.cin.fail()输入的整个字符串。由于某种原因,即使使用cin.ignore()等,它也总是返回true,并且if(cin>>startingPosition)也总是返回true。那么,如何让它捕捉到一个偶数,并识别它是一个字符串而不是一个int?如中所示,如果它是字符串,如何使其再次循环 int getUserPosition(bool volatileCall

我遇到的问题是,如果您输入任何字符串,cin会将int分配给0。一个有趣的发现是,如果以后将cin带到字符串中,则会得到为int.cin.fail()输入的整个字符串。由于某种原因,即使使用cin.ignore()等,它也总是返回true,并且if(cin>>startingPosition)也总是返回true。那么,如何让它捕捉到一个偶数,并识别它是一个字符串而不是一个int?如中所示,如果它是字符串,如何使其再次循环

int getUserPosition(bool volatileCall = false) {
    cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
    int startingPosition;
    cin >> startingPosition;
    while (startingPosition >= WIDTH || startingPosition < 0) {
    cout << "Invalid slot." << endl << endl;

        if (volatileCall) {
            return -1;
        }
        cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
        cin >> startingPosition;
        cout << startingPosition << endl;

    }
    return startingPosition;
}
int-getUserPosition(bool-volatileCall=false){
不能起动位置;
同时(起始位置>=宽度| |起始位置<0){

cout您必须保存来自cin的结果

isNumber=(cin>>开始位置);

整个代码看起来像

int getUserPosition(bool volatileCall = false) {
    cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
    int startingPosition;
    bool isNumber = (cin >> startingPosition);
    while(isNumber && (startingPosition >= WIDTH || startingPosition < 0)) {
        cout << "Invalid slot." << endl << endl;
        if (volatileCall) {
            return -1;
        }
        cout << "Which slot do you want to drop the chip in (0-8)? " << endl;
        isNumber = (cin >> startingPosition);
        cout << startingPosition << endl;
    }
    return startingPosition;
}
int-getUserPosition(bool-volatileCall=false){
cout启动位置);
而(isNumber&(startingPosition>=宽度| | startingPosition<0)){

请仔细阅读,尤其是和。最后学习如何创建。请详细说明您的问题,或者更确切地说,向我们提问。“我遇到的问题是,如果您输入任何字符串,cin会将int指定给0。”我看不出这是个什么问题……对于无效的输入,它还应该做什么?@Blaze另一种选择可能是将int保留为以前的值,或者报告错误。一个小的术语问题:赋值方向相反,从值到对象;它将0赋值给int。这根本不起作用。
bool isNumber=(cin>>startingPosition);
是无效的,因为C++11,而
中的测试是反向的,您需要清除
cin
的状态才能从错误中恢复。@n.m.您是对的。我不会在C++11中测试它。我稍后会解决这个问题