Brechen while-Schleife durch die EOF
Ich versuche dieses problem zu lösen und ich brauche deine Hilfe.
Habe ich diesen code...
while(a != EOF){
scanf("%f",&a);
...
}
...und das möchte ich beenden dieser Schleife durch drücken von STRG+D. Es funktioniert, aber ich muss die Taste zweimal. Ich habe versucht, zu verwenden diese
while(getchar() != EOF){
scanf("%f",&a);
...
}
aber das gleiche Ergebnis. Gibt es eine Möglichkeit, diese Schleife durch drücken von STRG+D nur einmal?
Danke für jede Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überprüfen, ob EOF direkt in scanf:
Weitere Informationen, Lesen Sie die Dokumentation auf scanf (ein Beispiel von Ihnen).
scanf
gibt 0 zurück (was der Fall wäre, wenn die Eingabe konnte nicht analysiert werden als float).Sollten Sie prüfen, das Ergebnis der Ausschreibung zu
scanf
- nicht nur für die EOF -, sondern auch, um sicherzustellen, dass der Wert korrekt analysiert.scanf
gibt die Anzahl der Elemente, die erfolgreich gescannt wurden, in Ihrem speziellen Fall, wird es wieder auf 1, wenn es erfolgreich gescannt ein Schwimmer. Wenn das Parsen war nicht erfolgreich, dann können Sie sich nicht darauf verlassen, dass der Wert vona
danach.Haben Sie mindestens zwei Lösung:
I.
while (scanf("%f",&a) != EOF) {
...
}
II.
erhalten Sie von
File Descriptor
Testen Sie die Rückkehr von
scanf()
: wenn der stream beendet ist werde zurückkehrenEOF
.scanf
scheitert und er überprüft nicht diescanf
Ergebnis, wird er eine operation durchführen, die mit ungültigen Daten. Und wenn er das tut überprüfen Sie diescanf
Ergebnis gibt es keine Notwendigkeit fürfeof(stdin)
.Versuchen, diese, dies kann Hilfe für Sie: