C : Wie überprüfe Ende der Eingabe von der Tastatur oder einer Datei während der Verwendung von scanf einen char in einer Zeit,
Habe ich ein Programm schreiben in C für die Klasse, liest ein Zeichen in einer Zeit, und wir haben die Verwendung von scanf. Ich habe es auf Arbeit mit der Eingabe von nur der Tastatur, aber mein Lehrer testet den code mit Datei-Umleitung sowie.
int end; //return value of scanf
int length1; //length of string exp1
char temp, //temp char for input
char exp1[81]; //string
printf ("Please enter in a regular expression:\n");
end = scanf ("%c", &temp);
while (temp != '\n' || end == 1) { //check if end of input
length1 = check(temp, length1, exp1); //returns length of exp1
end = scanf ("%c", &temp); //scan next char for loop
}
Ich habe an diesem einen kleinen problem, für Stunden zu versuchen, es herauszufinden, so dass alle Hinweise sind hilfreich. Danke!
EDIT: ich habe versucht, mit dem kbhit () - Funktion in einer if Anweisung, um zu überprüfen, ob Sie bei der Eingabe in die Eingabe-oder wenn die Eingabe aus einer Datei. Allerdings habe ich nicht conio.h, gibt es keine alternative, während immer noch mit scanf?
Du musst angemeldet sein, um einen Kommentar abzugeben.
scanf
zurückEOF
wenn ein Eingabe-Fehler Auftritt, bevor der erste Umbau (wenn überhaupt) abgeschlossen hat. So können Sie überprüfen, auf, die. Aber du liest nur ein Zeichen der Zeit, das scheint nicht notwendig, da Sie bereits überprüfen, wenn der return-Wert, wenn1
.Ich finde den Fehler in der Logik in Ihrem
while
Bedingung, es sollte sein:Müssen Sie vergleichen, scanf-Ausgabe mit
EOF
Könnten Sie wandeln diese in etwas wie:
scanf()
nicht zurückEOF
wenn ein Fehler bei der Konvertierung Auftritt. Es gibt die Anzahl der Argumente, die erfolgreich konvertiert. Es gibt nurEOF
wenn die Eingabe beendet wurde, bevor der erste Umbau entsprechen oder Versagen, das ist nicht das, was der OP will.Ihrem engeren Umfang-Frage wurde bereits beantwortet, aber lassen Sie mich Ihnen einen guten Rat erteilen. Wenn Sie nicht gezwungen sind, zu verwenden
scanf()
in der Klasse (ich. e. Sie schreiben, real -, Produktions-code), dannNur loswerden
scanf()
. Es ist böse. Es macht nicht das was Sie denken, es tut.Wenn Sie möchten, um ein Zeichen zu einem Zeitpunkt, verwenden Sie dann die Funktion, die bekommt ein Zeichen zu einem Zeitpunkt. Und das ist
fgetc(stdin)
.