2016-11-13 5 views
1
#include <stdio.h> 

int main(void) 
{ 
    char ch; 
    int end=0; 
    printf("\nPick a letter a through f. (f ends the program)"); 
    do 
    { 
     scanf("%c", &ch); 

     switch (ch) { 
    case 'a': 
     printf("a. another: "); 
     break; 
    case 'b': 
     printf("b. another: "); 
     break; 
    case 'c': 
     printf("c: another "); 
     break; 
    case 'd': 
     printf("d. another: "); 
     break; 
    case 'e': 
     printf("e. another: "); 
     break; 
    case 'f': 
     printf("f. Goodbye. "); 
     end=1; 
     break; 
    default: 
     printf("That wasn't a through f. "); 
     break; 
     } 
    } while (end == 0); 
    return 0; 
} 

Так что, если вы вводите, то он будет говорить:Почему мой оператор switch печатает случай и значение по умолчанию?

a. another: That wasn't a through f. 

Если ввести сказать г, то он будет говорить:

That wasn't a through f. That wasn't a through f. 

Если ввести е, то он будет делать, как и ожидалось

f. Goodbye. 

и программа завершается.

Любые советы о том, как исправить это? Я пробовал найти его на некоторое время, и я получаю ответы не на C, или они говорят, что вы забываете перерыв; заявление. Я новичок в C, так что, возможно, это что-то очевидное, я не замечаю, я также подумал, что это может быть связано с чем-то вроде цикла while? Спасибо за ваше время

+0

Проблема с 'scanf ("% c ", &ch);' Исправить, добавив в него пробел: 'scanf ("% c ", &ch); ' – artm

+0

scanf без пробелов в спецификаторе формата не будет обрабатывать пробелы по-разному любому другому персонажу. Он выполняет цикл один раз для 'a', а затем снова для новой строки. – Tibrogargan

+0

Благодарим вас за объяснение в scanf. Я понятия не имел, что это так. case '\ n': break; и scanf ("% c", &ch); обе работают одинаково – jonnyboy1555

ответ

3

scanf("%c", &ch) читает по одному символу за раз. Если вы печатаете письмо и затем нажимаете Enter, тогда вы предоставляете два символа: букву и символ новой строки (U + 000A, '\n').

Если вы хотите игнорировать символы новой строки, один из вариантов является явно проверить их:

case '\n': 
    break; 
0

Вы также можете попробовать использовать этот метод ..

scanf("%c\n", &ch);

Он будет автоматически съедать избыточные символы \ n

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