cin >> int с заданной строкой присваивает int 0 - PullRequest
0 голосов
/ 22 октября 2018

Проблема, с которой я столкнулся, заключается в том, что если вы введете какую-либо строку, то cin назначит int равным 0. Интересным выводом является то, что если вы позже возьмете cin в строку, вы получите всю строку, вставленную для int,cin.fail () всегда возвращает true по какой-то причине, даже с cin.ignore () и т. д., а if (cin >> начальная позиция) также всегда возвращает 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;
}

1 Ответ

0 голосов
/ 22 октября 2018

Вы должны сохранить результат из cin

isNumber = (cin >> startPosition);

весь код будет выглядеть как

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;
}
...