Mam następujący program:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d",&a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c",&c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
Jak czytałem w książce C, autor mówi, że scanf()
zostawił znak nowej linii w buforze, dlatego program nie zatrzymuje się na linii 4, aby użytkownik wprowadził dane, a raczej przechowuje znak nowej linii w c2 i przechodzi do wiersz 5.
Czy to prawda?
Jednak czy dzieje się tak tylko w przypadku char
typów danych? Ponieważ nie widziałem tego problemu z int
typami danych jak w liniach 1, 2, 3. Czy to prawda?
fflush(stdin)
można go użyć przed wywołaniemscanf()
pojedynczego znaku. Przeczytaj Korzystaniefflush(stdin)
z omówienia zalet i wad oraz alternatyw dla tej metody (która działa mniej więcej w systemie Windows i nie działa w większości innych miejsc).