#include <iostream>
#include <string>
using namespace std;
int main()
{
// Declare a variable to store an integer
int InputNumber;
cout << "Enter an integer: ";
// store integer given user input
cin >> InputNumber;
// The same with text i.e. string data
cout << "Enter your name: ";
string InputName;
cin >> InputName;
cout << InputName << " entered " << InputNumber << endl;
return 0;
}
Приведенная выше программа выдает неправильный вывод, если я ввожу некоторую строку для InputNumber, что там происходит, я предполагаю, что память, выделенная для Inputnumbe, перезаписывается, но проблема ли это? Пример вывода также дается.
correct output
Enter an integer: 123
Enter your name: asdf
asdf entered 123
wrong output
Enter an integer: qwert
Enter your name: entered 0
Когда вы ввели строку для целого числа, но попытались прочитать ее в целочисленной переменной, входной поток вошел в состояние ошибки. Состояние ошибки остается липким, пока не будет сброшено. Вы можете проверить состояние ошибки, проверив, успешно ли выполнена операция ввода, или проверив good()
метод, или проверка битов на rdstate()
метод. Состояние ошибки может быть очищено с помощью clear()
метод.
Шокирующе, что «ввод строки в число» невозможен, что приводит разработчиков библиотеки C ++ к удивительному выводу о том, что может потребоваться попытка ввода, а затем определить, удалось ли это. Это сделано так:
int x;
if (std::cin >> x)
sing_and_dance();
else
cry();
Google std::istream
если вы хотите увидеть, как правильно его использовать.