2016-11-22 3 views
3

Warum nach dem ersten Eingang ?:C-Programm schließt nach erstem getchar()

#include <stdio.h> 
int main() { 

    int a; 
    int b; 
    printf("Enter a first value :"); 
    a = getchar(); 

    printf("You entered: "); 
    putchar(a); 

    printf("\n Enter a second value :"); 
    b = getchar(); 
    return 0; 
} 

Das Programm schließt nach dem Drucken

"Enter a second value :" 
+0

IMO ist dies eine Anklage auf dem Standard, dass 'getchar' auch ein' newline' erfordert und Das hat unzählige Probleme und zahllose Fragen verursacht, die immer wieder kommen werden. Wenn MSVC etwas richtig gemacht hat, war es mit seinem 'getch' und' kbhit', obwohl sie das ähnliche Problem nicht adressieren, wenn die 'scanf'-Funktionsfamilie verwendet wird. –

+0

Mögliche Duplikate von [Warum ist mein Professor mit zwei getchar();?] (Http://stackoverflow.com/questions/1432989/why-is-my-professor-using-two-getchar) – anatolyg

+0

nicht sicher, was die Verwirrung ist. –

Antwort

1

b = getchar(); zuordnet b zum Zeilenende-Zeichen links wird der folgende Ausschnitt schließt im Eingangsstrom von Ihrer ersten Eingabe.

1

Überprüfen Sie die Rückkehr von getchar

while (((b = getchar()) != '\n') && (b != EOF)) { } 

es für beide Ihren Anruf Überprüfen getchar

int main() 
{ 
    int a; 
    int b; 
    printf("Enter a first value :"); 
    while (((a = getchar()) != '\n') && (a != EOF)) { } 

    printf("You entered: "); 
    putchar(a); 

    printf("\n Enter a second value :"); 
    while (((b = getchar()) != '\n') && (b != EOF)) { } 
    return 0; 
} 
+1

Braucht Klammern um '(b = getchar())! = '\ N'' und' b! = EOF', da '&&' eine höhere Priorität als '! =' Oder '==' hat. Sonst richtig. Du machst '(b = getchar())! = (' \ N '&& b)! = EOF'. – Blacksilver

+0

@Blacksilver Danke Ich habe meinen Beitrag bearbeitet –

+0

Kein Problem. Ich mache diesen Fehler die ganze Zeit. – Blacksilver