jak działa scanf?

jak działa scanf?
KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1652
0

Dajmy sobie taki kod:

Kopiuj
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?

Kopiuj
Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

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

MA
  • Rejestracja: dni
  • Ostatnio: dni
0

Czemu by nie tak?

Kopiuj
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);
quetzalcoatl
  • Rejestracja: dni
  • Ostatnio: dni
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);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.