Č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.


Last modified: Wednesday, 13 May 2026, 11:53 AM