Vektor in Datei schreiben



  • Hallo,

    ich habe ein problem damit, ein zweidemensionales Feld ( V[x][y] ) in eine Datei zu schreiben und danach wieder zu öffnen.
    In den Feldern stehen jweils zweistellige Zahlen ( z.B. V[1][2]=22 ), die in die Datei geschrieben werden sollen ( soll etwa so aussehen: 23 34 72 74 .... ). Und wie kann ich die Datei danach wieder auslesen, dass sie eventuell wieder in einen Feld stehen?
    Dieser Ansatz scheint falsch zu sein :

    if((fp=fopen("Ergebnis", "w")) != NULL) {
    for(i=0; i<=7; i++) {
    for(x=0; x<=5; x++) {
    fprintf( fp, "%d ", Ergeb[i][x]);
    }
    }
    fclose(fp);
    }

    Gruß Badman



  • nein, der ansatz ist richtig, WENN dein feld [8][6] dimension hat. deine arraygrenzen sehen falsch aus.

    lesen mit sscanf.



  • was meinst du damit, dass die arraygrenzen wohl falsch aussehen?
    mit sscanf in die datei einlesen oder die datei damit auslesen?



  • char array[10] hat elemente von [0] bis [9], soweit klar?

    mit sscanf liest man aus einem string werte in variablen ein. mit fscanf kannst du die datei lesen.



  • Das <= in der Schleife macht es ein wenig unübersichtlich finde ich.

    Mach doch einfach so:

    #define SIZE_A 6
    #define SIZE_B 8
    
    int meinlustigesArray[SIZE_A][SIZE_B];
    
    for (int i = 0; i < SIZE_A; i++)
       for (int j = 0; j < SIZE_B; j++)
    


  • ja, unübersichtlich ist es schon noch. muss ich noch dran arbeiten.
    aber zurück zu sscanf, ich habe jetzt schon so einiges ausprobiert, aber es werden mir ständig fehler angezeit.

    sscanf(V[][], "%s", S[]);

    das heißt doch, dass alle werte aus dem Feld in die Zeichenkette geschrieben werden sollen. passiert aber nicht!

    keine Ahnung wie ich das Feld in einen string schreiben kann, damit ich es vernünftig in eine Datei schreiben kann, um sie dann auch wieder vernünftig auszulesen. 😞



  • Du mußt auch jeweils den Index angeben, den du verwenden willst:

    for(i=0;i<SIZE_A;++i)
      for(j=0;j<SIZE_B];++j)
        scanf("%d",array[i][j]);
    




  • das habe ich ja gemacht:

    int x;
    int y;
    int z=0;

    for(x=0; x<=12; x++) {
    for(y=0; y<=2; y++) {
    sscanf(V[x][y], "%s", S[z]);
    z++;
    }
    }

    dann sagt mir der compiler: 1. Cannot convert 'int' to 'const char *'
    2. Type mismatch in parameter '__buffer' in call to
    'sscanf(const char *, const char *, ...)



  • zeig den ganzen code. wie sind V und S definiert?

    ich bitte dich, nimm dir ein buch und lerne, bevor du ausprobierst.



  • #include <stdio.h>
    
    #define dateiname "testErge.txt"
    
    int main(void) {
    
      FILE* fp;
      char V[2][3]={ {1,2,3}, {7,8,9,} };
      char S[81];
      int x;
      int y;
      int z=0;
    
      for(x=0; x<=12; x++) {
          for(y=0; y<=2; y++) {
            sscanf(V[x][y], "%d", &S[z]);
            z++;
          }
      }  
    
      if((fp=fopen(dateiname, "w")) != NULL) {
        fputs(S, fp);
        fclose(fp);
      }
      else {
        printf("Fehler beim beschreuben der Datei!");
      }
      return 0;
    }
    


  • badman schrieb:

    for(x=0; x<=12; x++) {
          for(y=0; y<=2; y++) {
            sscanf(V[x][y], "%d", &S[z]);
            z++;
          }
      }
    

    Was soll dieser Block eigentlich erreichen?


Anmelden zum Antworten