jak działa scanf?

jak działa scanf?
KA
  • Rejestracja:około 21 lat
  • Ostatnio:około 4 lata
  • 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:około 20 lat
  • Ostatnio:17 minut
0

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


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
MA
  • Rejestracja:prawie 16 lat
  • Ostatnio:prawie 11 lat
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);

Zero litości dla nieróbstwa.
quetzalcoatl
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 6 lat
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);


no to pojechałem z nieobecnością.. chwila przerwy i prawie rok przeleciał

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.