Zacząłem czytać "The C Programming Language" (K & R) i mam wątpliwości dotyczące funkcji getchar()
.Gdzie `getchar()` przechowuje dane wejściowe użytkownika?
Na przykład kod:
#include <stdio.h>
main()
{
int c;
c = getchar();
putchar(c);
printf("\n");
}
Typing toomanychars
+ CTRL + D (EOF) drukuje tylko t
. Myślę, że jest to oczekiwane, ponieważ jest to pierwsza postać wprowadzona.
Ale wtedy ten drugi kawałek kodu:
#include <stdio.h>
main()
{
int c;
while((c = getchar()) != EOF)
putchar(c);
}
Wpisanie toomanychars
+ CTRL + D (EOF) drukuje toomanychars
.
Moje pytanie brzmi: dlaczego tak się dzieje, gdy mam tylko jedną zmienną char? gdzie są przechowywane pozostałe znaki?
EDIT:
Dzięki wszystkim za odpowiedzi, zaczynam się go teraz ... tylko jeden haczyk:
Pierwsze program wychodzi, gdy dana CTRL + D chwilę drugi drukuje cały ciąg, a następnie czeka na więcej danych wprowadzanych przez użytkownika. Dlaczego czeka na inny ciąg i nie wychodzi tak jak pierwszy?
Twoje drugie podejście przechodzi w pętle do EOF. CTRL + D (w typowych systemach uniksowych) nie spowoduje EOF, chyba że trafisz w linię. Naciśnięcie klawiszy CTRL + D po napisaniu postaci nie powoduje dokładnie EOF – nos