2012-03-24 6 views
1

Code:Warum überspringt dieses C-Programm meine Eingabe vollständig?

#include <stdio.h> 
main() { 

    int nums[100], i; 
    char answer; 
    int count = 0; 
    double avg; 

    for (i = 0; i < 100; i++) { 
     printf("Enter number %d: ", i + 1); 
     scanf("%d", &nums[i]); 
     printf("Another? "); 
     scanf("%c", &answer); 
     count += nums[i]; 
    } 
} 

RUN:

~> a.out 
Enter number 1: 1 
Another? Enter number 2: 2 
Another? Enter number 3: 3 
Another? Enter number 4: 4 
Another? Enter number 5: 5 
Another? Enter number 6: 6 
Another? Enter number 7: 7 
Another? Enter number 8: 8 
Another? Enter number 9: 

Es soll mich fragen, ob ich eine andere Nummer eingeben möchten, aber aus irgendeinem Grund die scanf funktioniert nicht. Außerdem muss ich es so einrichten, dass der Benutzer 100 Nummern eingeben kann, oder eine beliebige Zahl darunter, die mit der Frage "Möchten Sie eine andere Nummer eingeben" aufgefordert werden. Wenn die Antwort nein ist, endet sie, wenn ja, macht sie weiter.

+0

Ich stelle fest, dass selbst wenn Sie das Lesen ein Zeichen, was aussortiert Sie treffen keine Entscheidung auf der Grundlage der Eingabe ... – dmckee

+0

Ja, ich weiß, ich mache das später, das ist nicht mein Problem. Das oben genannte, was ich gepostet habe, ist. – eveo

Antwort

6

Ihr erster Scan-Befehl hinterlässt eine neue Zeile im Puffer. Es ist, weil %d nachfolgende Leerzeichen ignoriert, während %c nicht funktioniert. Verwenden Sie diesen billigen Trick die zweite machen scanf essen die Rohlinge:

scanf(" %c", &answer); 
    ^

Das Problem häufig genug ist, können Sie in der C FAQ mehr darüber lesen.

+0

+10 wenn ich könnte! Ich hatte dieses Problem Tausende Male – BlackBear

+0

Eine bessere Lösung ist dies: scanf ("% c% * c", & antwort); Das Sternchen teilt scanf mit, das zweite Zeichen zu analysieren, aber nichts zuzuweisen. –

+0

Vielen Dank cnicutar. Danke auch Carey Gregory. – eveo

0

Sie benötigen ein Leerzeichen vor dem %c, um den Zeilenumbruch zu überspringen, der nicht gelesen wurde, als scanf am Ende der Nummer gestoppt wurde.

ich einige ungebetene Ratschläge haben ...

  1. Verwenden Sie keine scanf(3) direkt, es zu schwer ist, um es zu tun, was Sie wollen. Es ist normalerweise besser, fgets(3) und dann sscanf(3) zu verwenden.

  2. Kompilieren mit Warnungen aktiviert. (Auf meinem Mac, das bedeutet cc -Wall ...)

Und mit Warnungen eingeschaltet, hier das Programm mit ein paar Probleme behoben:

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

    int nums[100], i; 
    char answer; 
    int count = 0; 
    // double avg; 

    for (i = 0; i < 100; i++) { 
     printf("Enter number %d: ", i + 1); 
     scanf(" %d", &nums[i]); 
     printf("Another? "); 
     scanf(" %c", &answer); 
     if (answer != 'y' && answer != 'Y') 
      break; 
     count += nums[i]; 
    } 
    return 0; 
} 
Verwandte Themen