Fehler beim einlesen einer Datei



  • Hallo,

    ich habe die letzten Wochen ein Spiel programmiert, es ist schon fertig und funktioniert bestens 😃 . Allerdings habe ich es nicht in C programmiert, daher glaube ich das ich bei meinem Problem einfach nur irgenteinen C Typischen Fehler habe. Wie auch immer, beim Laden von Variablen aus einer Datei tritt ein Fehler auf, denn anstatt das die Variablen werte wie 1 oder 2 haben, sind da auf einmal werte bis in die Millionen. Hier ist der Code wo geladen wird :

    int main()
    {
        long x,y;
        printf("Lade Daten\n");
    	FILE *datei;
    	if (datei = fopen("info.txt", "r"))
    	{
    		for (x = 2 ; x <= 5 ; x++)
    		{
    			for (y = 2 ; y <= 5 ; y++)
    			{
                    fscanf(datei ,"%ld\n",&laden[x][y][0]);
                    fscanf(datei ,"&ld\n",&laden[x][y][1]);
                    fscanf(datei ,"&ld\n",&laden[x][y][2]);
    
                    feld[x][y].spieler = laden[x][y][0];
                    feld[x][y].soldaten = laden[x][y][1];
                    feld[x][y].gebaude = laden[x][y][2];
                    printf("Feld : %ld,%ld  Spieler : %ld  Soldaten : %ld  Gebaude : %ld\n",x,y,&feld[x][y].spieler,&laden[x][y][1],&feld[x][y].gebaude );
                }
    		}
    
    		fscanf(datei, "%ld\n%ld\n", &punkte,&position);
    		fclose(datei);
                    printf("Daten Geladen !\n");
    	}// Hier ist eigentlich noch ein else, aber das ist ja uninteressant
    }
    

    Hier ist nochmal der Inhalt der Datei :

    1
    0
    1
    1
    0
    0
    1
    0
    0
    1
    0
    0
    1
    0
    0
    1
    0
    0
    1
    0
    0
    1
    0
    0
    2
    0
    0
    2
    0
    0
    2
    0
    0
    2
    0
    0
    2
    0
    0
    2
    0
    0
    2
    0
    0
    2
    0
    1
    40
    2
    

    Hier sind nochmal einige Variablen deklarationen

    struct Tfeld
    {
    	long spieler;
    	long soldaten;
    	long gebaude;
    }  feld[8][8] = {0};
    
    long laden[6][6][3] = {0};
    

    Das die schleife bei 2 los geht ist beabsichtigt, da einige Felder ungültig sein sollen. Hoffe ihr könnt mir Helfen. 🙂



  • Guck dir Zeile 13 und 14 mal ganz genau an und dann sag mir, dass du den Fehler gefunden und dann deinen Kopf drei mal ganz feste auf den Tisch geschlagen hast. 🙂



  • LLOOLL 😮 hast recht, aber nach dem ändern funtioniert es trotzdem noch nicht, denn bei spieler stand ja schon %ld und da kam auch so eine hohe zahl raus



  • Dann wirf jetzt noch mal einen Blick auf Zeile 19. 🙂
    (Edit: Und frag dich wozu noch gleich der &-Operator gut war.)



  • aja, den adress operator musste man ja nur bei Zeichenketten angeben, danke für die Hilfe. 3 Monate Delphi und das C wissen ist weg 😃



  • NoName57253 schrieb:

    aja, den adress operator musste man ja nur bei Zeichenketten angeben

    Wie kommst du auf die Idee, man müsste ihn bei Zeichenketten angeben? Da übergibst du doch eh einen Pointer, aber eben keinen Pointer auf einen Pointer.

    NoName57253 schrieb:

    3 Monate Delphi

    Selbst schuld. 🙂



  • printf(" %s   =   %s \n\n", &d[pos1][0] , &e[pos1][0]);
    

    ohne gehts nicht

    Selbst schuld. 🙂

    Ansichtssache 😉


  • Mod

    Siehe und staune!

    printf(" %s   =   %s \n\n", d[pos1] , e[pos1];
    

Anmelden zum Antworten