0 Daumen
479 Aufrufe

Frage:

Hallo ich habe ein Problem mit folgendem Code in C:

Ich habe eine Eingabedatei in .txt Form mit zwei Spalten. Die sieht zum Beispiel so aus:

5 8

3 7

2 7

...


Wenn eine Datei übergeben wird, die dem Format nicht entspricht, soll das Problem 1 zurückgeben.

Also wenn ich z.B eine Datei haben, die so aussieht:

5 8
3 7 4
2 7
...


Ich habe das mit folgendem Code in der Main-Methode versucht:


Code:

......

while((read = fscanf(fin, "%d %d\n", &type, &col)) == 2 ) {

  if (read == EOF) {
    printf("Invalid input file format\n");
    return 1;
  }
......
}
.....  


Allerdings gibt das Programm nicht die 1 zurück, sondern die 0 die ganz am Ende der Main Methode steht.
Wie kann ich das ändern, dass die 1 zurückgegeben wird?

Avatar von

1 Antwort

0 Daumen
read = fscanf(fin, "%d %d\n", &type, &col)

Die Variable read ist jetzt die Anzahl der gelesenen Werte.

(read = fscanf(fin, "%d %d\n", &type, &col)) == 2

Diese Bedingung ist wahr, falls genau zwei Werte gelesen wurden. Außerdem hat read dann den Wert 2.

while((read = fscanf(fin, "%d %d\n", &type, &col)) == 2 )

Der Rumpf der while-Schleife wird nur dann ausgeführt, wenn read den Wert 2 hat.

    if (read == EOF) {
    printf("Invalid input file format\n");
    return 1;
  }

Im Rumpf der while-Schleife hat die Variable read den Wert 2. Es ist also sinnlos, im Rumpf der while-Schleife zu testen, ob read nicht vielleicht doch einen anderen Wert hat. Prüfe stattdessen nach der while-Schleife, ob EOF erreicht wurde. Falls nicht, dann wurde die while-Schleife aufgrund fehlerhafter Eingabedaten abgebrochen.

Avatar von 5,7 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community