Состояние ошибки std :: cin и изменение переменной

0

Я думал, что если cin войдет в состояние ошибки, переменная, в которую она втекает, остается неизменной. Однако, похоже, контрпример:

#include <iostream>
using namespace std;

int main()
{
  cout << "Enter int: ";

  int i = 5;
  cin >> i;

  if(cin.fail()) cout << "failed \n";
  cout << "You entered: " << i << "\n";
}

Бег:

Enter int: g
failed 
You entered: 0

Куда я пошел так плохо?

  • 0
    Этот код работал отлично со мной .. с выводом как 5! (MSVC)
  • 0
    тип данных для меня был int; вы дали значение char на выходе ..
Показать ещё 1 комментарий
Теги:
cin
iostream

1 ответ

1

Поведение изменилось в С++ 11. Сбой целочисленного извлечения теперь устанавливает переменную в 0.

GCC 4.8 демонстрирует новое поведение даже без -std=c++11, что, вероятно, является ошибкой/ограничением библиотеки. Там только один libstdc++, и он не знает, какие флагов компилятора были использованы для компиляции main.

  • 0
    Вы знаете, как я могу увидеть, какую версию C ++ я использую? Я использую g ++ и для того, чтобы использовать другие функции C ++ 0x (такие же, как C ++ 11, я слышал?), Мне пришлось добавить -std = c ++ 0x при компиляции, поэтому я не уверен, какой из них я использовал здесь. РЕДАКТИРОВАТЬ: Использование g ++ 4.6.3
  • 0
    Вы не должны полагаться ни на какое поведение в любом случае. Считайте значение неопределенным.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню