Frage von Suchtiii2000, 62

C-Programm liest .txt Datei nur manchmal richtig ein?

Hey Leute,

Ich habe eine Frage zu meinem C-Programm und zwar, Ich habe ein Programm geschrieben welches eine Text Datei einlesen soll und die Werte auslesen soll (Um Werte speichern zu können). Manchmal funktioniert es und manchmal nicht (Jedes zwanzigste mal funktioniert es ungefähr, sonst liest er nur die erste Zahl ein), obwohl ich nichts am Quellcode verändert habe? Wisst ihr woran dies liegt? Dieses Programm wollte ich dann in ein anderes implementieren, um dort Werte speichern zu können.

#include <stdlib.h>
#include <stdio.h>


void main()
{
    //Datentypen erstellen
    FILE *datei;
    int counter = 0;
    int i = 0;
    char wort[100];
    char LetztesWort[100];
    int LetzteZahl = 0;

    //Dateipfad für Text Datei
    datei = fopen("Daten.txt", "r");

    if(datei == 0)
        return;

    for( ; ; )
    {
        fscanf(datei, "%s", wort);
        counter++;

        //Jedes zweite Wort, aber nicht jedes Vierte ist eine Zahl
        if(counter%2 == 0 && counter%4 != 0)
        {
            LetzteZahl = wort;
            printf("Zahl: %s\n", LetzteZahl);
        }

        //Jedes vierte Wort, ist ein Wort
        else if(counter%4 == 0)
        {
            for(i=0; wort[i] != 100; i++)
                LetztesWort[i] = wort[i];
            printf("Wort: %s\n\n", LetztesWort);
        }

        //Wenn Datei ende ist, beenden und Datei schließen
        if(feof(datei))
            break;
    }

    fclose(datei);
}

Die Text Datei heisst Daten.txt und hat diesen Inhalt:

: 300 = LebenSpieler 
: 200 = LebenGegner 
: 2 = GesamtSpiel 
: 1 = GewonneneSpiele
: 1 = VerloreneSpiele
: 0 = UnentschiedeneSpiele

Vielleicht weiß ja jemand von euch, wieso es so ist.

Danke im voraus für jede Antwort :)

Lg. Suchtiii2000

Antwort
von maximilianus7, 30

ich kann mir nicht vorstellen, dass das programm überhaupt funktioniert:

LetzteZahl = wort;

geht so nicht: letztezahl ist ein int, wort ist eine speicheradresse, der auf einen string zeigt. wenn du das programm in der entwicklungsumbgebung laufen lässt, kann diese adresse je nach vorangehender aktivität verschieden sein, jedenfalls enthält diese nicht die eingabe im int-format.

am besten verlegst du das fscanf in die if-verzweigungen, und zwar als

fscanf(datei, "%d", &LetzteZahl);

wenn du eine zahl erwartest, und

fscanf(datei, "%s", wort);

wenn du ein wort erwartest.

Kommentar von Suchtiii2000 ,

Okay, wenn ich das so versuche Funktioniert es auch nicht, da er dort die Datei weiterliest an der er stehen geblieben ist, dann wäre er immer weiter, somit ist das Wort nicht mehr das richtige Wort. Wenn ich es anders mache stürzt das Programm direkt ab... :(

Wenn ich aber die beiden Variablen "LetzteZahl" und "wort" Global deklariere, Funktioniert es mit meinem Code Perfekt. 

Übrigens, das Programm hat auch vorher gestartet, nur nicht immer korrekt...

Lg

Antwort
von ThomasAral, 50

evtl ist die TXT-Datei keine reine ASCII-Textdatei, sondern Unicode.

Du musst beim Abspeichern darauf achten, dass dein Editor in reinem ASCII speichert --- hat er diese Option nicht, geht er meist beliebig vor, je nach vorhandenem Text und du könntest ein 8bit Unicode, 16bit Unicode oder was auch immer haben ... das  kann obiger Code nicht richtig lesen (er liest es aber es kommen andere werte raus, eben evtl. keine zalen an den stellen an denen du zahlen willst)

Kommentar von Suchtiii2000 ,

Okay, vielen dank schonmal. :)

Nächste Frage, wie kann ich es in ein ASCII Code umändern? Die Text Datei habe ich mit dem Editor geschrieben... :D

Lg

Keine passende Antwort gefunden?

Fragen Sie die Community