jak działa scanf?

0

Dajmy sobie taki kod:

int x;
char c;
scanf("%d", &x);
scanf("%c", &c);
printf("%d %c", x, c); 

Jak to się dziej, że gdy wpiszemy dowolną liczbę, to na wyjściu dostajemy tę liczbę i liczbę 10?
Oczywiście wiem, ze 10 to znak nowej linii. Jednak nie rozumiem mechanizmu scanfa. Myślałem, że scanf przy takim formatowaniu jak "%d" wczytuje kolejne znaki, aż napotka znak, który nie jest cyfrą i wtedy przerwa działanie. Ale gdyby tak było, to drugi scanf już nie mógłby odczytać tego następnego znaku po ostatniej cyfrze, czyli znaku nowej linii. Czy scanf jakoś odsyła do bufora ten znak, że potem drugi scanf też może go napotkać?

Jak w takich okolicznościach napisać taki program:

wejście składa się z wielu linii w formacie:
"%c %d" lub "%c"
tzn, najpierw jest zawsze jakiś znak, a w zależności od tego, jaki to znak, może w tej linii pojawić się jeszcze liczba.

jak wczytać taki wiersz?

0

Może scanf("%c%d\n", &c, &x); ?

0

Czemu by nie tak?

int x;
char c;
scanf("%d", &x);
scanf("%c", &c);       //Tu wyladuje enter
scanf("%c", &c);       //Tutaj to co chcesz
printf("%d %c", x, c);
0

a czemu nie:

int x;
char c;
scanf("%d", &x);
scanf(" %c", &c); //Tutaj to co chcesz, bo SPACJA w format stringu zeżre entera i dowolna reszte bialych znakow jakie sie przyplacza
printf("%d %c", x, c);

1 użytkowników online, w tym zalogowanych: 0, gości: 1