2014-10-01 2 views
-3

Эта программа, похоже, не принимает ввод на каждой итерации цикла while, когда в идеале она должна. Однако, когда я заменяю параметр% c функции scanf() на% d (т. е. целочисленный ввод, а не вход char), похоже, он просто работает абсолютно нормально, и этот вход принимается для каждой итерации цикла while. Почему я вижу это несоответствие?C: scanf() внутри цикла

int main() 
{ 
    char grade; 
    int i=0; 

    while(i<10){ 
     printf("Enter ur grade\n"); 
     scanf("%c", &grade); 
     switch(grade){ 
      case 'A' : printf("U R THE BEST\n"); 
         break; 
      case 'B' : printf("U R VERY GOOD DUDE...\n"); 
         break; 
      case 'C' : printf("U R GOOD DUDE...\n"); 
         break; 
      case 'D' : printf("U R Not good DUDE...\n"); 
         break; 
      case 'E' : printf("U R WORST DUDE...\n"); 
         break; 
      default : printf("U r AWESOME...\n"); 
         break; 
     } 
    i++; 
} 
+1

Можете привести пример ввода и вывода, который вы получаете? –

+2

scanf не удаляет новую строку из входного буфера. много дубликатов на SO: http://stackoverflow.com/questions/13275417/why-scanfd-does-not-consume-n-while-scanfc-does (на самом деле не обманывать, а решать вашу проблему) –

+0

Каждый раз, когда вы вводите char (вы фактически вводите два символа), во входном потоке остается символ новой строки ('\ n'), который потребляется на следующей итерации. Вам нужно очистить его с помощью 'getchar()' или аналогичных методов. –

ответ

-1

Добавить пробел перед %c в scanf. Это делается для удаления всех пробелов из stdin перед сканированием символа. scanf не принимает символ \n (введите ключ) после ввода символа и оставляет его в буфере, который принимается при вызове scanf.

Другое дело: вы забыли положить один } в свой код.

-1

попробуйте это: положите место перед %c, потому что оно хранит \n тоже.

scanf(" %c", &grade); 
Смежные вопросы