Aus txt. Datei in ein int array schreiben



  • Hallo zusammen !
    Ich möchte folgende Datei lesen und in ein 2d int array speichern!

    8 1 4 5
    7 12
    36
    3 45 7

    6 39 5
    52
    3 8 2 9
    17 8

    Ist ein Sudoku.

    Mein Ansatz war der , dass ich es erst in ain char array schreibe und dann von dem aus ins int array caste.

    Ausgabe sieht teilweise richtig aus aber nach n par zeilen wirds falsch und verschoben.

    FILE *datei;
    	      datei = fopen (argv[1], "r");
    
    		 if (datei != NULL) {
    		     fscanf (datei, "%81c", text);
    
                    text[100] = '\0';
                    printf ("%s\n", text);
                    k=0;
                    for(i=0;i<=8;i++){
                        printf("\n");
                        for(j=0;j<=8;j++){
    
                            if(!isdigit(text[k]))
                                feld[i][j]=0;
                            else
                            feld[i][j]=atoi(&text[k]);
                        k++;
    
                        printf("%i",feld[i][j]);
                        }
    
                        }
    
    		     fclose (datei);
    

    Wäre nett wenn jemand ne Lösung parat hätte!



  • Nimm statt fscanf() lieber fgets() , denn du wilst ja eine Zeile einlesen.

    atoi() ist für Strings (Nullterminierte char-Arrays) da.
    Wenn du in deiner zweiten Zeile zur 1 kommst, liest er das mit der 2 dahinter zur 12.
    Wenn du nur eine Ziffer umwandeln willst: feld[i][j] = text[k] - '0';



  • suckobert schrieb:

    fscanf (datei, "%81c", text); <-- macht sicher nicht das, was du beabsichtigst
    
                    text[100] = '\0'; <-- geht schief, falls char text[100]; definiert wurde 
                    printf ("%s\n", text);
                    k=0;
                    for(i=0;i<=8;i++){
                        printf("\n");
                        for(j=0;j<=8;j++){
    
                            if(!isdigit(text[k])) <- auch das geht schief, da du hier leere Felder nicht durch Whitespaces in der Datei vorgeben darfst,
    sondern explizit z.B. durch X.
    
    int a[9][9],i=0;
    ...
    while( i<9 && 9==fscanf(f,"%d%d%d%d%d%d%d%d%d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4],&a[i][5],&a[i][6],&a[i][7],&a[i][8]) )
      ++i;
    

    könnte funktionieren für Dateiinhalte der Form: ( 0 kennzeichnet leeres Feld )

    1 2 0 4 0 6 0 8 9
    . . . . . . . . .
    . . . . . . . . .
    . . . . . . . . .
    . . . . . . . . .
    . . . . . . . . .
    . . . . . . . . .
    . . . . . . . . .
    . . . . . . . . .
    

Anmelden zum Antworten