Если я ввожу число с плавающей запятой, когда ввод ожидает целое число, он обновляет следующее значение числа с плавающей запятой. Почему так случилось? - PullRequest
0 голосов
/ 08 мая 2020

Я совершенно новичок в ie программировании на C ++. Итак, я просто пробовал кодировать базовый c C ++ и написал следующую программу:

#include <iostream>

using namespace std;

int main()
{
    int number1;
    float number2;

    cout << "Enter number1 (integer)\r\n";
    cin >> number1;
    cout << "Enter number2 (float)\r\n";
    cin >> number2;

    cout << "Number1 is "<<number1<<"Number2 is "<<number2<<endl;
    return 0;
}

Когда я выполняю приведенный выше код и неправильно говорю число вроде «20,7» вместо целого числа что он ожидает, когда он запрашивает number1,

, второй оператор cin пропускается, и номер 1 печатается как 20, а number2 печатается как 0,7.

Почему это так? Я ожидал, что первый cin должен просто сделать 20,7 как 20 и сохранить его в number1, а второй cin не должен пропускаться и запрашивать у меня ввод.

Это неправильное ожидание? И почему это происходит?

1 Ответ

3 голосов
/ 08 мая 2020

Вы передаете float в int. cin перестает читать, как только видит '.' а оставшееся число 7 автоматически принимается в качестве входных данных для следующего cin.

Вы можете проверить sh входные буферы после каждого чтения, если вы думаете, что значения могут не соответствовать ожидаемому типу .

std::cin.clear(); и std::cin.ignore(100,'\n').

, что будет

std::cin.clear();
std::cin.ignore(whatever_num,'\n');

Более подробную информацию можно найти здесь и здесь

Отредактируйте, ради Пита:

  1. >> Оператор потока является виновником.
  2. Все входные данные - ТЕКСТ.
  3. В лучшем случае считайте ввод как ТЕКСТ, а затем анализируйте / делайте с ним все, что захотите.
  4. Избегайте cin.clear () и cin.ignore ().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...