2016-10-15 3 views
1

Betrachten Sie folgenden Code:getchar() in einer for-Schleife Bedingung

int main() 
{ 
char c; 
for(;(c=getchar())+1;) 
    printf("%c\n",c); 
} 

Es wird Zeichen, was ich in Terminal eingeben und druckt sie. Wenn ich +1 in Bedingung entferne, funktioniert Programm, aber es hört nicht auf, wenn EOF (Ctrl + D) signal. Wenn ich es zu +2 gleichen Problem ändern.

Meine Frage ist, wie funktioniert das +1? Ist es etwas mit getchar() oder for Schleife verbunden?

+5

Weil'EOF' typischerweise als '-1' und' -1 + 1 = 0' definiert ist. Kurz gesagt, tu das nicht. Was Sie tun sollten, ist while ((c = getchar())! = EOF) ' – user3386109

+4

Und' char c; '->' int c; 'weil' getchar() '' int' zurückgibt. –

+1

Um zu betonen, was @ user3386109 und @WeatherVane schrieb: Sie müssen beide Maßnahmen verwenden! EOF ** typisch ** ist "-1", es ist nicht garantiert! Allgemeiner Hinweis: Lesen Sie die Dokumentation der von Ihnen verwendeten Funktionen und Makros usw.! Alles kann in jedem C-Buch gefunden werden. Zusammen mit dem, was ein Zusatz in C bedeutet (die mathematischen Grundlagen sollten in der Schule gelernt werden). – Olaf

Antwort

1

Das heißt, da der int-Wert von EOF-1 ist, so was Sie tun, ist Schleife, bis der Ausdruck (c=getchar())+1) den Wert 0, was ist, wenn Sie EOF (wo Wert von exrpession lesen ist: -1 + 1 = 0). Auch als wll in den Kommentaren darauf hingewiesen, sollten Sie c wie erklären int seit getchar() returns int.

1

für Anweisung mit Grenzen arbeitet bereits bekannt , wenn Sie eine bedingte Schleife verwenden möchten, während:

int main() 
{ 
int c; 
while ((c=getchar()) != eof()) 
    printf("%c\n",c); 
} 
+0

Der Rückgabetyp von 'getchar()' ist 'int', nicht' char'. Verwenden Sie nicht "char". –

+0

Ich habe seinen Code kopiert und bearbeitet !! danke –

1

Grund, warum es funktioniert für + Nur 1.

Prototyp: int getchar (void);

Rückgabewert

  • Bei Erfolg wird das gelesene Zeichen zurück (gefördert in einen int-Wert).

  • Der Rückgabetyp ist int, um den speziellen Wert EOF zu berücksichtigen, der auf Fehler (-1) hinweist.

  • Wenn die Standardeingabe am Ende der Datei war, gibt die Funktion EOF zurück und setzt den eof-Indikator (feof) von stdin.

  • Wenn ein anderer Lesefehler auftritt, gibt die Funktion auch EOF zurück, setzt aber stattdessen den Fehlerindikator (ferror).