2016-05-26 20 views
5

Ich benutze getchar(), während ich ein Programm in C schreibe (scanf ist zu diesem Zeitpunkt noch nicht erlaubt.) Ich habe mich gefragt, ob ich es jedes Mal anrufe, wenn es zum nächsten geht; einschließlich während der Zuweisung. Beispielsweise; Ich versuche in einem Doppel von der Konsole zu lesen; und entscheiden, ob es auf der Vorderseite ein negatives Vorzeichen hat. Wenn es das tut; Ich möchte eine Variable neg zu 1 zuweisen (so dass ich sagen kann, ob das Endergebnis negativ sein soll) und dann möchte ich zum nächsten Zeichen gehen, um meine tatsächlichen Doppelberechnungen zu machen und was nicht. ex)mit getchar() in C; Bewegt es sich jedes Mal zum nächsten Zeichen, wenn ich es benutze? Einschließlich in Zuweisungsoperationen?

int x = getchar(); 
     int neg = 0; 

     if(x == '-') { 
     neg = 1; 
    x = getchar(); // will this make it so the next time I use the x   
     }   // variable it will be past the negative sign and to the 
        //first actual digit? 
+0

Sortieren von - das Lesen geschieht, sobald 'x = getchar();' ausgeführt wird, nicht das nächste Mal, wenn 'x' verwendet wird. –

+0

Was Sie mit dem Rückgabewert einer Funktion tun, einschließlich 'getchar()', hat keinerlei Auswirkungen auf die Funktion selbst, wenn Sie sie aufrufen. Insbesondere hat die Zuweisung des Rückgabewerts an eine Variable keine Auswirkungen. Es gibt andere Faktoren, die das Funktionsverhalten modulieren, z. B. die Werte ihrer Argumente, aber Funktionen wissen weder, was Sie mit ihren Rückgabewerten machen, noch interessieren sie sich dafür. –

Antwort

5

Ja, jedes Mal wenn Sie getchar() nennen es die nächsten Zeichen lesen (vorausgesetzt, es nächste Zeichen zu lesen).

Zitiert C11 Kapitel §7.21.7.6

getchar() Die Funktion gibt das nächste Zeichen aus dem Eingangsstrom zu stdin durch spitz.

Im Fall gibt es nichts gültig

lesen, werden, wenn der Strom am Ende der Datei ist, wird die End-of-Datei Indikator für den Strom gesetzt und getchar gibt EOF zurück. Wenn ein Lesefehler auftritt, wird der Fehlerindikator für den Datenstrom gesetzt und getchar gibt EOF zurück.