2016-10-16 2 views
-1

Итак, я создаю эту программу, которая может принимать только числовое значение от 1 до 5 и только с помощью операторов switch, я должен превратить это числовое значение в соответствующую римскую цифру. У меня возникают проблемы с int case, поскольку я уже пробовал это с двойными кавычками вокруг чисел, так как я уверен, что одиночные кавычки предназначены для символов. Я обязательно включил iostream и имел int = num;Неисправность при использовании корпусов с коммутаторами int

#include <iostream> //preprocessor directives are included 

using namespace std; 

int main() { 
    int num = 0; 

    cout << "Enter a number from 1 to 5: " << endl; 
    cin >> num; 
    switch (num) { 
    case "1" : 
     cout << "I" << endl; 
     break; 
    case "2" : 
     cout << "II" << endl; 
     break; 
    case "3" : 
     cout << "III" << endl; 
     break; 
    case "4" : 
     cout << "IV" << endl; 
     break; 
    case "5" : 
     cout << "V" << endl; 
     break; 
    } 

} 
+0

Ваш код без qutes вокруг чисел отлично работает для меня ... Можете ли вы сказать мне, что с ним не так? Выход компилятора? –

+0

На этом этапе я не могу запустить его из-за того, что ошибка «метка case не сводится к целочисленной константе». Думаю, я попробую и перезапустить мой компилятор. – Can

+0

Хорошо, это сработало. Спасибо, что сообщили мне, что это сработало для вас, иначе я бы не нашел его. – Can

ответ

4

Вы сравниваете значения строк, а не int. Бросьте кавычки из каждого заявления case.

+0

Я продолжаю получать ошибку, чтобы метка case не уменьшалась до целочисленной константы. Я также бросил цитаты. – Can

+0

отправьте этот код. –

+0

#include using namespace std; int main() { \t \t int num = 0; \t \t cout << "Введите число от 1 до 5:" << endl; \t \t cin >> num; \t \t переключатель (Num) { \t \t Случай 1: \t \t \t соиЬ << "Я" << епсИ; \t \t \t break; \t \t кейс 2: \t \t \t cout << "II" << endl; \t \t \t break; \t \t case 3: \t \t \t cout << "III" << endl; \t \t \t break; \t \t case 4: \t \t \t cout << "IV" << endl; \t \t \t break; \t \t case 5: \t \t \t cout << "V" << endl; \t \t \t break; \t \t} \t} – Can

0

вы можете ввести символ или строку или что-нибудь, что угодно, независимо от типа вводимой переменной! поэтому ввод строки как целого приведет к неизвестному поведению или бесконечному циклу.

жаль нет никакого способа узнать, CIN, что вы хотите только цифры или числа от 1 до 5.

решение:

использование обработки исключений:

#include <iostream> 

int main() 
{ 
    int num = 0; 
    std::cin.exceptions(); 

    try{ 
      std::cout << "Enter a number from 1 to 5: " << std::endl; 
      std::cin >> num; 
      if(std::cin.fail()) 
       throw "Bad input!"; 
      if(num > 5 || num < 1) 
       throw "only numbers 1 throug 5 are allowed!"; 
    } 
    catch(char* cp) 
    { 
     std::cout << cp << std::endl; 
    } 
    catch(...) 
    { 
     std::cout << "An error occuered sorry for the inconvenience!" << std::endl; 
    } 

    switch (num) 
    { 
     case 1 : 
      std::cout << "I" << std::endl; 
     break; 
     case 2 : 
      std::cout << "II" << std::endl; 
     break; 
     case 3 : 
      std::cout << "III" << std::endl; 
     break; 
     case 4 : 
      std::cout << "IV" << std::endl; 
     break; 
     case 5 : 
      std::cout << "V" << std::endl; 
     break; 
     //default: 
     // std::cout "Bad input! only numbers 1 through 5" << std::endl; 
    } 

    return 0; 
} 
Смежные вопросы