Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

1

17.01.2011, 14:31

Datei mit fgets() einlesen - überflüssige Zeichen filtern.

Hallo,

Ich mache gerade immernoch den SUdokulöser und bis gestern Abend dachte ich tatsächlich, ich sei endlich fertig, nachdem ich noch einige Fehlerabfragen hinzugefuegt habe.
Heute morgen meinte der Prof. aber, dass auch fehlerhafte Eingaben im Sinne von überflüssigen Zeichen in der Textdatei, abgefangen werden müssen.

D.h. selbst wenn das Sudoku in der Textdatei so aussieht:

123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
(Ich weiss ist nicht lösbar, geht mir um die Veranschaulichung), dann reicht es, wenn 5 Zeilen darunter noch eine 5 oder ein a oder was auch immer steht.

Ich lese mit fgets ein, lasse dabei aber eben nur die Zeilen und Spalten 1-9 einlesen und prüfe diese dann entsprechend auf Fehler.
Gibt es mit fgets() eine Möglichkeit, auch sowas abzufangen, oder muss ich zwangsweise auf eine andere Methode umsteigen?
Den Code für die Einlesefunktion kann ich bei Bedarf posten.

MfG Sascha

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

17.01.2011, 19:17

Wenn ich dich richtig verstehe dann ist das Problem dass die Datei mehr enthalten kann als nur die neun Zeilen da? Mir ist nicht ganz klar wo da die Schwierigkeit liegt, hör doch einfach auf zu lesen wenn du alles hast was du brauchst!?

Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

3

17.01.2011, 19:26

Wenn ich dich richtig verstehe dann ist das Problem dass die Datei mehr enthalten kann als nur die neun Zeilen da? Mir ist nicht ganz klar wo da die Schwierigkeit liegt, hör doch einfach auf zu lesen wenn du alles hast was du brauchst!?
Hallo,

danke erstmal für die Antwort. Genauso funktioniert das ja, ich lese jetzt 9 Zeilen lang je 9 Zeichen ein, das klappt einwandfrei, ich überprüfe die eingelesenen Zeichen auch, ob sie in Frage kommen - auch das klappt einwandfrei.
Aber unser Professor meinte eben, auch sowas soll abgefangen werden, also überflüssige Zeichen, scheinbar irgendwo ind er Datei. Ich frage mich ja selbst, wieso das sein muss, so lange die 81 entscheidenden zeichen passen....
Deshalb die Frage, wie sich sowas realisieren lässt, ist einer von insgesamt fünf Testfällen, vier muss das Programm schaffen.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

17.01.2011, 19:36

Naja, wenn du alles gelesen hast und das Ende der Datei nicht erreicht ist dann gibts eben offenbar einen Fehler. Ich weiß nicht wie Whitespaces gehandhabt werden sollen, wenn sie ignoriert werden sollen dann musst du eben noch nachdem du alles gelesen hast weiterlesen bis du zum Ende kommst (Datei ok) oder zu einem Zeichen das eben kein Whitespace ist (dann is die Datei fehlerhaft). In dem Fall würd ich aber aus Konsistenzgründen auch Whitespaces am Anfang etc. ignorieren.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (17.01.2011, 19:51)


Affje

Treue Seele

  • »Affje« ist der Autor dieses Themas

Beiträge: 89

Beruf: Student

  • Private Nachricht senden

5

18.01.2011, 09:03

Ich lasse das ganze jetzt mit

C-/C++-Quelltext

1
2
3
4
5
6
7
        for (i = 0; i < 9; i++){                                                    /* 9 Zeilen lesen */         
            fgets(Buffer, 15, Datei);                                           /* Aus "Datei" auslesen, in Buffer zwischenspeichern */
            for (j = 0; j < 9; j++){                                               /* Spalten */
                if (strlen(Buffer) > 10){                                       /* zu viele Zeichen? */
                    Eingabefehler("Eingabefehler");
                    return 0;
                }


prüfen, jedoch macht so die letzte Zeile Probleme, Zeile 1-8 klappen ganz gut. Wie kann das die 9. Zeile auch noch richtig prüfen? Ich glaubd er hängt da ja \0 an, wenn er fertig ist.
Weil wenn ich mit > 11 oder so teste, dann klappt die letzte Zeile, aber die vorherigen nicht, wenn da nur 1 Zeichen zu viel ist.

Werbeanzeige