Tebe verovatno buni kako rade buffer i getchar().
1. Otvori ti se konzola, ti upišeš neke karaktere i pritisneš enter, u tom momentu bafer se napuni tim karakterima uključujući i enter.
2. Svaki put kad u kodu pozoveš getchar() on uzima karakter iz bafera.
Ako pokreneš ovaj kod:
Kod:
int main(){
char a;
a = getchar();
printf("\nPrvi karakter uzet iz bafera, ascii vrednost je: %d, a karakter je: '%c'",a,a);
a = getchar();
printf("\nDrugi karakter uzet iz bafera, ascii vrednost je: %d, a karakter je: '%c:'",a,a);
a = getchar();
printf("\nTreci karakter uzet iz bafera, ascii vrednost je: %d, a karakter je: '%c:'",a,a);
return 0;
}
a) kao input u konzoli upišeš abc i prtisneš enter on će uzeti iz buffera a, b i c i ispisati sve tri poruke
b) kao input u konzoli upišeš ab i prtisneš enter on će uzeti iz buffera a, b i ENTER (videćeš da je treća poruka presečena između navaodnika) i ispisati sve tri poruke
c) kao input u konzoli upišeš a i pritisneš enter on će uzeri iz buffera a i ENTER i ispisati prve dve poruke, a onda u konzoli zatražiti da uneseš još karaktera jer je bafer prazan, u sebi je imao dva karaktera, a ti si pozvao getchar() tri puta i getchar() nema više šta da iščita.
S obzirom na sve ovo gore napisano, zašto tvoj kod ne ispisuje enter.
1. Proverava se uslov spoljne while petlje tako što se uzme prvi karakter iz bafera, ako nije y ulaziš u telo petlje
2. Ušao si u petlju, ispisuje se printf(), proverava se uslov unutrašnje petlje tako što se uzima sledeći karakter iz bafera. Koja je svrha ove unutrašnje petlje? Njen uslov uzima karaktere iz bafera sve dok ne uzme i enter i na taj način prazni bafer. Zato ti nigde ne vidiš ENTER.
Pokreni ovaj modifikovani kod, mislim da će ti tako biti najjasnije:
Kod:
int main(){
char a;
while ((a=getchar()) != 'y') {
printf("\nSpoljna petlja -> Iz bafera uzet karakter cija je ASCII vrednost: %d", a);
while (a=getchar()){
printf("\nUnutrasnja petlja -> Iz bafera uzet karakter cija je ASCII vrednost: %d", a);
if (a == '\n'){
printf("\nOk, to je enter, bafer je prazan i izlazimo iz unutrasnje petlje\n");
break;
}
}
}
return 0;
}