cin.fail () не возвращает true - PullRequest
0 голосов
/ 05 сентября 2018

Я не уверен, правильно ли я понимаю cin.fail (). Я пытаюсь заставить его возвращать true, когда пользователь не вводит целое число.

#include <iostream>
using namespace std;

int main() {
    int number;

    cout << "Please enter a positive integer: ";
    cin >> number;
    cout << cin.fail();

    return 0;
}

Всякий раз, когда я ввожу нецелое число (например, 55,687), оно возвращает 0 (false) для cin.fail (). Я не уверен почему. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 05 сентября 2018

Поток еще не вышел из строя.

Когда >> читает целое число, оно останавливается, как только находит символ, который не может быть в целом числе. В случае "55.687" это символ '.'. Таким образом, cin >> number читает 55 в number, а ".687" остается в потоке для дальнейшего чтения.

С учетом того же ввода

int main() {
    int number;

    cout << "Please enter a positive integer: ";
    cin >> number;
    cin >> number;
    cout << cin.fail();

    return 0;
}

Второй cin >> number потерпит неудачу, потому что '.' не может быть проанализирован в int. Пример: https://ideone.com/iB3aNk

...