2014-02-15 5 views
0

Я искал и пробовал разные вещи в течение часа и не могу понять это. Почему мой дефолт не работает? Если я вхожу в 1-4, выход будет таким, как ожидалось. Однако, если я ввожу любое другое число или письмо, ничего не отображается. Я бы хотел, чтобы по умолчанию отображалось, если я ввожу любое другое число или букву.Оператор переключения C++. По умолчанию не работает

RESOLVED: Это был мой компилятор. Перейти к использованию Visual Studio только с этого момента. (Сначала VS не показывал мое значение по умолчанию, потому что я использовал его неправильно.) Спасибо всем за ваши ответы.

Мой код:

int main() 
{ 
    int num; 

cout << "Please enter the code stamped on the storage drive (1-4): "; 
cin >> num; 

switch (num) 
{ 
     case 1: 
      cout << "The code you entered was 1; therefore, the storage capacity is 2GB." << endl; 
      break; 
     case 2: 
      cout << "The code you entered was 2; therefore, the storage capacity is 4GB." << endl; 
      break; 
     case 3: 
      cout << "The code you entered was 3; therefore, the storage capacity is 16GB." << endl; 
      break; 
     case 4: 
      cout << "The code you entered was 4; therefore, the storage capacity is 32GB." << endl; 
      break; 
     default: 
      cout << "Invalid selection - Please input 1 to 4 only."; 
      break; 

}   //end of switch 


return 0; 
} 
+3

Поскольку вы игнорируете возвращаемое значение операции ввода-вывода. –

+0

Что вы ввели, когда это не сработало? –

+1

Попробуйте положить '<< endl' в конце выходной строки для случая по умолчанию, чтобы очистить вывод до окончания программы. –

ответ

4

defaultявляется работает (я тестировал), при условии соблюдения следующих предостережений.

Прежде всего, способ структурирования вашего кода, вы должны ввести что-то. Если вы просто нажмете Enter, ничего не произойдет, потому что cin >> num продолжит ждать номера.

Во-вторых, при вводе чего-либо, что не является числом, cin >> num не удается и оставляет num неинициализирован. Это приводит к undefined behaviour в switch.

Вы должны инициализировать num (скажем, для 0 или другого недопустимого значения) и/или проверить, является ли cin >> num удалось:

if (cin >> num) { 
    // the read has succeeded 
} else { 
    // the read has failed 
} 
+0

В этом вопросе говорится: «Почему по умолчанию не работает?" –

+0

Да, это действительно не отвечает на вопрос – meda

+1

+1 Если' num' повезло (или нет), чтобы удерживать один из тегов коммутатора во время его жизни неопределенного состояния, это объясняет * точно * почему 'default' никогда не попадает. Знать, что наблюдение ФП «не работает» было бы полезным, но не меняет правильности ответа. – WhozCraig

0

Попробуйте добавить либо '\n' в конце вашего сообщения по умолчанию или << endl.

Похоже, текст с default ждет, чтобы его покраснели.

Вы также можете добавить cout.flush(); до конца своей программы.

-3

Я знаю, что это бессмысленно говорит что-то, как это было недавно, но для тех, у кого есть аналогичная проблема, посмотрите на свой код .... case 1: он должен вместо случая «1»: то же самое относится к каждому в другом случае, тогда ваш оператор switch будет работать

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