Кто-нибудь может объяснить вывод этой программы? - PullRequest
1 голос
/ 20 марта 2011

Почему следующая программа выдает два выходных сообщения одновременно, не запрашивая ввода у пользователя ???

#include <stdio.h>
#include <ctype.h>

int main(void) 
{
    char input;
    do {
        printf("Enter a single character: \n");
    scanf("%c", &input);
        printf("The ordinal value is %d. \n",input);    

        } while(input != '#'); 
    return 0;
}

Вывод следующий:

Enter a single character:
s
The ordinal value is 115.
Enter a single character:
The ordinal value is 10.
Enter a single character:

Ответы [ 2 ]

5 голосов
/ 20 марта 2011

Терминальный ввод является строкой чтения за раз, если не указано иное;scanf читает один символ, как указано, оставляя новую строку, введенную вами позже, чтобы отправить строку во входном буфере для следующего прохода цикла.Попробуйте прочитать ввод по строкам и использовать sscanf() или аналогичный для анализа этих строк.

0 голосов
/ 20 марта 2011

Просто вставьте getchar (); после вашего звонка в scanf. Это будет есть новая строка. Предложение использовать scanf ("% c \ n", & input); кажется здоровым, но я никогда не находил, что это работает хорошо; Интересно, может кто-нибудь сказать мне, почему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...