scanf Übersprungen werden [duplizieren]

8

Ich versuche ein einfaches C-Programm für eine Klasse zu erstellen und eine der Voraussetzungen ist, dass ich scanf / printf für alle Ein- und Ausgaben verwenden muss. Meine Frage ist, warum wird mein scanf nach der for-Schleife im main übersprungen und das Programm einfach beendet.

Hier ist mein Code

%Vor%

Ich konnte es "reparieren", indem ich ein weiteres identisches scanf nach dem ersten hinzufüge, aber ich würde es vorziehen, das einzige zu verwenden.

    
Austin Davis 23.01.2013, 16:26
quelle

1 Antwort

19

Das in stdin nach dem letzten int angegebene Zeichen für neue Zeilen wurde beim letzten Aufruf von scanf() nicht verbraucht. Der Aufruf von scanf() nach der for -Schleife verbraucht also das Zeichen für die neue Zeile und wird fortgesetzt, ohne dass der Benutzer etwas eingeben muss.

Um zu korrigieren, ohne einen weiteren scanf() -Aufruf hinzufügen zu müssen, können Sie den Formatbezeichner " %c" in der scanf() nach der for -Schleife verwenden. Dadurch wird scanf() alle führenden Leerzeichen (einschließlich der neuen Zeile) überspringen. Beachten Sie, dass der Benutzer etwas anderes als eine neue Zeile eingeben muss, um das Programm zu beenden.

Zusätzlich:

  • Überprüfen Sie das Ergebnis von scanf() , um sicherzustellen, dass es den übergebenen Variablen tatsächlich einen Wert zuweist:

    %Vor%
  • Dies ist eine Aufgabe (und wird immer wahr sein):

    %Vor%
hmjd 23.01.2013, 16:29
quelle

Tags und Links