Čišćenje ENTER karaktera u C++ ?
Uslovi za završetak
Čišćenje ENTER karaktera postoji zbog kombinovanja:
scanf()
i:
fgets()
Šta se zapravo dešava?
Kada korisnik unese:
5↵
scanf("%d", &n) pročita samo:
5
ali ENTER (\n) ostaje u ulaznom baferu.
Problem
Posle toga odmah pozivamo:
fgets(input, sizeof(input), stdin);
A fgets vidi da u baferu već postoji:
\n
i pročita samo taj ENTER.
Dakle:
-
korisnik nema priliku da unese komandu,
-
program „preskoči“ unos.
Zato koristimo na primer
getchar();
da uklonimo taj preostali ENTER.
Vizuelno
Bez getchar()
Korisnik unosi:
5↵
Bafer nakon scanf:
[\n]
fgets() pročita odmah:
"\n"
i izgleda kao da je unos preskočen.
Sa getchar()
getchar();
uzima taj:
\n
i uklanja ga iz bafera.
Posle toga:
fgets(...)
normalno čeka unos korisnika.
Gde se nalazi u programu?
Ovde:
scanf("%d", &n);
getchar();
Da li je obavezno?
Ako se koristi samo:
-
scanf
ili samo -
fgets
onda nije potrebno.
Problem nastaje kada se kombinuju različite funkcije za unos.
Poslednja izmena: среда, 13. мај 2026, 11:53