Kiedy skanowanie i skanowanie rozpoczyna się?

Wydaje sięscanf rozpoczyna skanowanie wejścia, gdyWchodzić klawisz jest wciśnięty i chcę to zweryfikować za pomocą poniższego kodu (dla uproszczenia wyeliminowałem sprawdzanie błędów i obsługę).

#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;
}

Nadchodzi kolejny problem, po wyłączeniu buforowania wejścia (tylko po to, aby zweryfikować wynik; wiem, że powinienem to robić nigdy w rzeczywistości, w przypadku, gdy przeszkadza to w wynikach), wyjście jest (zwróć uwagę na dodatkowy monit):

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

który różni się od wyjścia, gdy włączone jest buforowanie wejściowe (brak dodatkowego monitu):

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

Wygląda na to, że znak nowej linii jest zużywany, gdy włączony jest bufor. Przetestowałem na dwóch różnych maszynach, jeden z zainstalowanym gcc 4.1.2 i bash 3.2.25, drugi z gcc 4.4.4 i bash 4.1.5, a wynik jest taki sam na obu.

Problemy są następujące:

Jak wyjaśnić różne zachowania, gdy buforowanie wejścia jest włączone i wyłączone?Wracając do pierwotnego problemu, kiedy to robiscanf rozpocząć skanowanie danych wprowadzanych przez użytkownika? W momencie wejścia postaci? Czy może jest buforowany aż do zakończenia linii?

questionAnswers(1)

yourAnswerToTheQuestion