2014-09-06 2 views
1

У меня вопрос. Предположим, что код такой:Что произойдет, если я введу слово, когда потребуется ввести int?

int a; 
    cin>>a; 

Что произойдет, если я введу слово вместо целого числа? Какая ценность будет дана a?

Заранее спасибо.

+2

.... Вы попробовали и посмотрели? –

+1

, если вы беспокоитесь об этом, просто введите все как строку, а затем преобразуйте ее в нужный тип. – Tracer

+0

@KyleStrand Привет, я пробовал, и результат равен 0. И я хочу узнать более подробный механизм за результатом;) –

ответ

4

Перед использованием прочитанного значения вам нужно проверить результат операции чтения. Оператор >> возвращает ссылку на поток, который считывается, и поток содержит информацию о состоянии, чтобы указать, была ли последняя операция успешной или неудачной. Если не удалось, значение переменной, которая будет считаться, является неопределенной, поэтому не используйте ее.

Попробуйте это:

int a; 
if (cin >> a) // <-- same as: if (!cin.operator>>(a).fail()) 
{ 
    // read successful, use the int as needed... 
} 
else 
{ 
    // read failed, do not use the int... 
} 
+0

правильный, вы просто забыли дать ответ на вопрос – 4pie0

+0

@ 0d0a: Я ответил на вопрос «что произойдет "вопрос -' >> 'провалится. Я не ответил на вопрос «какое значение будет дан». Я добавил это сейчас. –

1

Когда вход пользователя не может быть преобразован в тип переменной, CIN >> оставляет значение переменной нетронутым. Вы видите, что переменная выглядит как неинициализированная, которая равна нулю. Поэтому, когда вы вводите слово вместо целого числа, значение переменной остается нетронутым и остается неинициализированным.

+0

Локальные переменные, которые являются типами POD, не инициализируются. Тот факт, что он равен нулю, является случайным поведением. Это будут те данные, которые уже занимают память стека, которую использует переменная. –

0

Это не проблема.

В C++ WORD обычно является подмножеством int.

Так полный WORD valuerange легко представить как int

Просто посмотрите здесь:

WORD datatype in windows environments (это просто значение два байта здесь, int по сравнению 4 байта шириной в большинстве случаев)

И конечно: Word size in linux

конечно, этот ответ немного вмятина

Смежные вопросы