Quando o scanf inicia e pára a digitalização?

Parecescanf começa a digitalizar a entrada quando oEntrar chave é pressionada, e eu quero verificar isso com o código abaixo (eliminei a verificação de erros e manuseio para simplificar).

#include <stdio.h>

int main(int argc, char **argv) {
    /* disable buffering */
    setvbuf(stdin, NULL, _IONBF, 0);
    int number;

    scanf("%d", &number);
    printf("number: %d\n", number);

    return 0;
}

Aí vem outro problema, depois que desabilitei o buffer de entrada (só para verificar o resultado; sei que deveria fazer o próximo-a-nunca na realidade no caso de interferir nos resultados), a saída é (anote o prompt extra):

$ ./ionbf
12(space)(enter)
number: 12
$
$

que é diferente da saída quando o buffer de entrada está ativado (sem prompt extra):

$ ./iofbf
12(space)(enter)
number: 12
$

Parece que o novo caractere de linha é consumido quando o buffer está ativado. Eu testei em duas máquinas diferentes, uma com o gcc 4.1.2 e o bash 3.2.25 instalado, a outra com o gcc 4.4.4 e o bash 4.1.5, e o resultado é o mesmo em ambos.

Os problemas são:

Como explicar os diferentes comportamentos quando o buffer de entrada está ativado e desativado?De volta ao problema original, quandoscanf começar a digitalizar a entrada do usuário? O momento em que um personagem é inserido? Ou é armazenado em buffer até que uma linha seja concluída?

questionAnswers(1)

yourAnswerToTheQuestion