#include<iostream>;
int main()
{
int a = 1;
int b = 2;
std::cin >> a >> b;
std::cout << a << "+" << b << "=" << a+b << std::endl;
return 0;
}
когда я вхожу 3 4
в качестве входа, выход будет 3+4=7
ну странно;
Но когда я вхожу a b
, выход 0+0=0
(Почему это 0 и 0?);
Самый запутанный,a 4
,это будет 0+0=0
(Почему не ‘0 + 4 = 4’ ?????);
Затем я пишу другую прогу.
#include<iostream>;
int main()
{
int a = 1;
int b = 2;
std::cin >> a;
std::cin.clear();
std::cin >> b;
std::cout << a << "+" << b << "=" << a+b << std::endl;
return 0;
}
Когда я вхожу a 4
почему это до сих пор 0+0=0
? Разве это не должно быть 0+4=4
?
Спасибо всем сердечным !!
Я пишу Prog3, чтобы проверить, что произойдет, когда я не пишу int a=1;int b=2
;
2
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin >> a ;
cin >> b;
cout<< a << "+"<< b <<"="<< a+b << endl;
return 0;
}
когда a b
опять же выводит 0+-1218170892=-1218170892
(Почему нет 0+0=0
??)
Как все istreams
, std::cin
имеет биты ошибок. Эти биты устанавливаются при возникновении ошибок. Например, вы можете найти значения битов ошибок с помощью таких функций, как good()
, bad()
, eof()
и т. д. Если вы прочитали неверный ввод (fail()
возвращается true
), используйте clear()
очистить флаги. Вам также, вероятно, понадобится ignore(1);
удалить оскорбительного персонажа.
Увидеть State functions
раздел для получения дополнительной информации. http://en.cppreference.com/w/cpp/io/basic_ios
std :: cin является экземпляром istream, и поэтому он сохраняет свое состояние ошибки, когда читает что-то недопустимое.
Чтобы «вылечить» его, вы должны оба очистить его флаг
std::cin.clear();
и очистить его буфер.
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Что еще более удивительно, так это то, что он не возвращает 1 + 2 = 3 при вводе недопустимых символов, так как я ожидаю, что сбойный поток cin не будет иметь побочных эффектов от того, что он пытается обновить.
Значение устанавливается равным нулю при ошибке согласно C ++ 11: если извлечение завершается неудачей, в ноль записывается значение и устанавливается бит битов.
В примере «a 4» оба значения равны 0, поскольку буфер не был очищен / очищен, поэтому при втором чтении из cin все еще читается ошибка, а также принимается значение 0.