Волшебство функции scanf ()? - PullRequest
0 голосов
/ 04 июня 2010

Зачем запускать этот код и печатать всю строку?

#include <stdio.h>

void main()
{
    int a;
    while(a!='q')
    {
        scanf("%c",&a);
        printf("%c",a);
    }
}

Введите строку, кроме q, и, наконец, нажмите клавишу ввода. Только теперь ваша строка будет печататься на экране. Почему?

Ответы [ 3 ]

3 голосов
/ 04 июня 2010

Проблема здесь не в scanf, а в вызове printf.

Printf буферизирует вывод, пока не будет достигнута новая строка, поэтому программа ничего не отобразит, пока вы не printf("\n");. (Что также происходит, когда кто-то нажимает клавишу ввода, вы выводите их возврат на экран, что приводит к сбросу буфера.)

Если вы не хотите разбивать вывод с помощью printf("\n"), то вы можете использовать fflush(stdout), чтобы вручную очистить буфер, не печатая ничего, например:

int a;
while(a!='q')
{
    scanf("%c",&a);
    printf("%c",a);
    fflush(stdout);
}
0 голосов
/ 04 июня 2010

Сначала вам нужно определить тип символа:

char a;

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

char a = 0;
int i = 0;
while(a!='q')
{
    scanf("%c",&a);
    printf("%d:%c",i++,a);
}
0 голосов
/ 04 июня 2010

Для начала, этот код не будет компилироваться - print не является функцией в C, printf - это та, которую вы ищете.

Что касается того, о чем я думаю, вы спрашиваете, я не знаю, почему вы хотите печатать каждый прочитанный вами символ, пока не прочитаете q; это кажется бессмысленным.

...