Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird ein Problem beschrieben, das auftritt, wenn Sie Textzeilen mithilfe der Fscanf
Funktion lesen.
Originalproduktversion: Visual C
Ursprüngliche KB-Nummer: 60336
Zusammenfassung
Wenn eine Datei im Textmodus geöffnet ist, kann ein Versuch, Textzeilen mithilfe der Fscanf
Funktion zu lesen, fehlschlagen, und nur eine Textzeile wird aus der Datei gelesen. Das Trennzeichen ist auf [^\n]
. Die Fscanf
Funktion liest bis zu, enthält aber nicht das Trennzeichen. Daher stoppt der Dateidatenstrom am ersten \n
In der Datei. Nachfolgende Fscanf
Funktionsaufrufe schlagen fehl, da der Dateizeiger am Trennzeichen verbleibt und die Fscanf
Funktion den Funktionszeiger nicht über sie weiterleiten kann. Wenn Sie den Dateizeiger über das Trennzeichen verschieben möchten, verwenden Sie eine der folgenden beiden Methoden:
Aktualisieren Sie den Code, um den folgenden
Fscanf
Funktionsaufruf zu verwenden:fscanf(stream, "%[^\n]%*c", line)
Der
%*c
Formatbezeichner liest ein Zeichen aus dem Eingabedatenstrom, weist ihn jedoch keinem der Parameter imfscanf
Funktionsaufruf zu.Rufen Sie die
Fgetc
Funktion nach demFscanf
Funktionsaufruf auf, um den Dateizeiger über das\n
Zeichen hinaus zu verschieben.
Im folgenden Codebeispiel wird dieses Problem veranschaulicht. Das Codebeispiel sollte Zeilen aus einer Textdatei lesen und drucken, bis es EOF erreicht. Das Codebeispiel liest jedoch nur die erste Zeile aus der Datei. Da das Ende des Dateizeichens nicht gefunden wurde, wird das Codebeispiel in einer Endlosschleife ausgeführt, wenn der Dateidatenstrom ein \n
Zeichen enthält.
Codebeispiel
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF )
{
printf("Line = %s \n",line);
}
Im folgenden Codebeispiel wird die zweite oben beschriebene Methode veranschaulicht, um dieses Problem zu umgehen:
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF)
{
fgetc(stream); // Reads in '\n' character and moves file
// stream past delimiting character
printf("Line = %s \n", line);
}