scanf nie zostaje wywołany w pętli for

0

Witam, proszę o przeanalizowanie tego kodu:

 
char x;
int i;
for(i=0;;i++)
{
  printf("Podaj x: ");
  scanf("%c",&x);
  printf("Wywolanie %d, wybrales %c\n\n",i,x);
}

Jako rezultat wyświetla w konsoli:

Podaj x: a
Wywolanie 0, wybrales a

Podaj x: Wywolanie 1, wybrales

Podaj x:

Po skompilowaniu jestem 1 raz pytany o "podaj x", gdzie mogę podać wartość.

Drugie uruchomienie pętli wygląda jak gdyby samo podało coś pod x, ja nie miałem możliwości nic wpisać (scanf nie zostal wywołany, dlaczego?), wartość x wyświetla jednak pustą, o co chodzi z tym ?

Trzecie uruchomienie pętli jest poprawne, bo pyta mnie - scanf został wywołany.

Dlaczego takie coś się dzieje ?

0

W przypadku %c scanf przeczyta tylko jeden znak i zostawi to co dalej (nie przejmuje się białymi znakami). Zostaje u Ciebie znak nowej linii po wciśnięciu klawisza enter, który jest odczytywany w następnej iteracji. Aby się tego pozbyć zamiast "%c" wpisz " %c" - wtedy scanf zignoruje białe znaki aż napotka coś, co można odczytać jako jeden znak.

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