buforowanie - problem ze zrozumieniem

0

Witam,dopiero się ucze C. I meczy mnie problem,jak to jest z tym buforowaniem.
Ja sobie wyobrazam bufor jako taka tablice,do ktorej trafiaja wszystkie dane wpisane np z klawiatury po wcisnieciu ENTER,i teraz zalozmy ze jest taki program:

#include <stdio.h>
#include <ctype.h>
int main(void)
{ char ch,ch2;
printf("Podaj\n");
ch='b';
while( ch!='a')
{
scanf("%c",&ch);

     scanf("%c",&ch2);
   
printf("%c %c\n",ch,ch2);
}

printf("KONIEC");
getchar();
getchar();
return 0;

}

No to jak wpisze ok i ENTER,to ch otrzymuje o a ch2 otrzymuje k,i teraz mam pierwsze pytanie,bede je zadawac co odpowiedz kogos,nie wszystkie naraz. Jezeli wpisuje np to ok,i nastepuje procedura odczytania,to czu po odczytaniu tych znakow przez funkcje scanf() te znaki o i k sa nadal w buforze czy bufor jest wyczyszczony?

0

Bufor jest kolejką. W tym przypadku ch == 'o', a ch2 == 'k'. Znaki 'o' i 'k' są "wyciągane" z kolejki, więc nie ma ich już w buforze.

Ale to wcale nie oznacza, że bufor jest wyczyszczony -- zostaje w nim jeszcze znak nowej linii, czyli wciśnięty przez Ciebie Enter. Stąd też potrzebujesz dwóch wywołań getchar() na końcu programu. Pierwszy getchar() pobiera pozostały w buforze Enter, więc program się nie zatrzymuje; dopiero drugi czeka na wciśnięcie ponownie, co zatrzymuje program -- bo bufor jest już pusty.

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