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?