2016-10-31 4 views
1
void getInputData(void) { 
    char c = 0; 
    while (c != 'x') { 
     printf("Enter a letter:"); 
     fflush(stdout); 
     c = getchar(); 
     printf("You entered: %c \n",c); 
     fflush(stdout); 
     getchar(); 
    } 
    printf("\nYou entered x and the loop exited\n"); 
} 

Почему в этой функции требуется getchar()? Я не понимаю, почему он там.Почему в этой функции требуется getchar()? Я не понимаю, почему он там

+0

Пробовал ли вы, что происходит без второго getchar()? –

+0

Он должен собирать 'newline' еще во входном буфере после' getchar', но есть лучшие способы сделать это. –

+0

Возможно, прочитайте новую строку, поскольку первый getchar() не будет возвращен, если не нажата ENTER? –

ответ

1

Предположим, что вы используете линии буферизация в вашей программе, идеальные входы пользователей каждый раз, когда следующие буквы, пока хитов «х»:
Т \ п
Н \ п
I \ п
S \ п
x \ n
Отправка данных работает только при нажатии клавиши ENTER/RETURN с клавиатуры. Вы должны обработать \n символ новой строки, чтобы получить следующий символ, поэтому необходимо использовать getchar().

+0

'getchar()' не является * промывающим буфером и делает его пустым *, он просто потребляет следующий байт, надеюсь, ожидает '' \ n''. Обратите внимание, что если пользователь вводит 2 символа перед ключом ввода, 'getchar()' будет недостаточным. Правильный способ: 'int c; while ((c = getchar())! = EOF && c! = '\ n') {} ' – chqrlie

+0

Почему во входном буфере остается' новая строка'? –

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

  • Нет связанных вопросов^_^