2009-11-10 5 views
0
int number; 
cin>>number; 

switch (number) 
{ 
    case 1: 
      cout<<"My Favourite Subject is"; 
      break; 
    case 2: 
      cout<<"Fundamentals of Programming"; 
      break; 
    case 3: 
      cout<<"Exit"; 
      break; 
    default: 
      cout<<"Invalid Data"; 
} 
+0

Это домашнее задание? –

+0

Должно быть, правда? –

+0

домашняя работа с тегами – minjang

ответ

1

Проверьте number равно первое значение переключателя, если равны, то выходной текст, в противном случае (еще) проверить следующий номер.

if (number == /*put here value to check*/) 
    // print some text 
else 
    // do something else 
4

Вы замените переключатель заявление с тем, если-то еще

if (number == 1) 
{ 
} 
else if (number == 2) 
{ 
} 
... 
{ 
} 
else 
{ 
    // default here 
} 
+1

Мне нравится, что вы оказали некоторую помощь, но не точный ответ ... – marcc

+3

Я пробовал, я хороший человек. Я стараюсь помочь новым разработчикам получить как можно больше практики копирования/вставки - чем меньше они используют свои головы, тем меньше они учатся, тем меньше они учатся меньше конкуренции на рынке ... Я, возможно, смогу получить работу даже когда я старую ... – stefanB

0

Заменить случай заявление с если заявление:

if (number == 1) { 
    cout<<"My Favourite Subject is"; 
} else if (number == 2) { 
    cout<<"Fundamentals of Programming"; 
} else if (number == 3) { 
    cout<<"Exit"; 
} else { 
    cout<<"Invalid Data"; 
} 
+2

-1 для выполнения домашней работы –

+0

вы не знаете, является ли домашнее задание, разработчик может быть действительно стеком, кодирующим свой следующий твиттер-сервер, и на самом деле нужно переложить часть замены коммутатора на if- else ... – stefanB

+2

+1 для попытки помочь – dalle

0

if (number == 1) {
cout << "blah1";
}
else if (number == 2) {
cout << "blah2";
}
else if (number == 3) {
cout << "blah3";
}
else { cout << "default";
}

+2

-1 для выполнения домашней работы –

+2

+1 для попытки помочь – dalle

1

Это моя любимая, несмотря на то, это не то, что вы просили:

string res = 
    number==1 ? "My Favourite Subject is" : 
    number==2 ? "Fundamentals of Programming" : 
    number==3 ? "Exit" : 
    number==4 ? "Invalid Data" : 
    ""; 

cout<<res; 

Хорошая сторона здесь заключается в том, что вам не нужно ограничивать себя целым сравнением. Вместо номера == 1 вы можете использовать любой тип complexComparisonReturningBoolean (number).

+1

Используйте 'const char *' вместо 'string', чтобы избежать копирования строк. –

+1

Мне действительно трудно читать более одного? оператора в одном выражении. – asveikau

+0

Это проще понять, если вы забыли, как работает -оператор. Здесь он определяет таблицу с двумя столбцами - столбцом условий и столбцом значений. – AareP

0

Try:
if (number < 1 || number > 3) {
//
} else if (number == 1) {
//
} else if (number/2 == 1) {
//
} else if ((number - 1)/ 2 == 1) {
//
}
Это поможет вам получить больше математики, чем просто опыт проверки равенства.

2
//Hey this is fun! 
int number; 
cin>>number; 

// ultra const! 
static const char const * const table[] = 
{ 
    "Invalid Data", 
    "My Favourite Subject is", 
    "Fundamentals of Programming", 
    "Exit" 
}; 

cout<<table[number&3]; 

//Who needs if statements!!? 
1

Кроме того, только для развлечения: Просто используйте заглавные буквы и запятой вместо двоеточия. Ах, и не забудьте добавить злой макрос :)

#define SWITCH(s) for(int switch_=s, b=1;b;b=0) { 
#define CASE(n) } if (switch_ == n) { 
#define DEFAULT } 

int number; 
cin>>number; 

SWITCH(number) 
{ 
    CASE(1); 
     cout << "My Favourite Subject is"; 
     break; 
    CASE(2); 
     cout << "Fundamentals of Programming"; 
     break; 
    CASE(3); 
     cout << "Exit"; 
     break; 
    DEFAULT; 
     cout << "Invalid Data"; 
} 

Это убить «переключатель», и если «для» петли не допускается, также возможно использовать BREAK макрос, но это еще больше зла.

+0

Возможно, было бы лучше, если бы вы использовали gotos для своих перерывов/BREAK. – tony

+1

, но с нормальным оператором switch в C вы можете написать: case 0: if (blah) case 1: {foo(); } И тогда случай 0 будет делать foo(), если blah истинно, тогда как случай 1 всегда будет делать foo(). Это не работает с вашими макросами. – asveikau

+0

@tony: Да, я тоже об этом думал, но где вы поместили ярлык выхода? Кроме того, я хотел избежать хлопот создания уникальной метки и передачи ее между макросами. – Alink

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