zweidimensionales array1 im zweidimensionales array2 speichern



  • Aber wieviel Zeichen willst du kopieren?
    36 waren es nicht.



  • nur 6 ?



  • Also jetzt bekomme ich schonmal die richtige ausgabe
    aber im Debugg Modus sehe ich das da noch viel Unsinn gemacht wir

    const char namenn[3][40]={"L1=wwwwwwwskkkwwwkwswwskwwwwwkkzwwwwwww",
                             "L2=wwwwwwwskkkwwwkwswwskwwwwwkkzwwwwwww",
                             "L3=wwwwwwwskkkwwwkwswwskwwwwwkkzwwwwwww"};
      char labn[200][200];
      int i2;
      printf("\n");
      for(i2=2;i2<=laenge+1;i2++){
    
      //for(i2 = 3; i2 < 36; ++i2){
    	  //memcpy(&labn[0][i2], &namenn[0][i2], 36);
    	  memcpy(&labn[getx][gety],&namenn[setx][i2],6);
    	  //printf("\n%c",labn[i2][1][1]);
          gety++;
          printf("%c",labn[getx][gety]);
    	  if (gety==(length)){
    
    		  printf("\n");
    		  // printf("\n %c", namen[setx][sety]);
    		  gety=0;
    		  getx++;
    
    	  }
     }
    

    das ist dann meine ausgabe

    wwwwww
    wskkkw
    wwkwsw
    wskwww
    wwkkzw
    wwwwww
    

    ich denke das reich mir auch zum weiter arbeiten, aber irgendwie füllt das programm die lab mit mehr als 6 zeichen


  • Mod

    Dave1990 schrieb:

    36 ist die größe von
    L1=..... sind ja 40 zeichen, in dem fall und ohne L1= sind es nur noch 36 Zeichen

    So so. 40-3=36?

    Schreib niemals blind Code ab, ohne ihn zu verstehen. Ich habe doch extra noch

    SeppJ schrieb:

    Verstehst du denn das Beispiel?

    gefragt. Wenn du darauf nicht antwortest, dann gehe ich erst einmal von einem "Ja" aus.

    Bei mir hatte die 36 einen Sinn. Mit deinen Änderungen aber nicht mehr. Trotzdem blieb die 36.

    Wir müssen hier viel früher ansetzen. Die Musterlösung war offensichtlich nicht hilfreich, weil du sie nicht verstehst. Du musst erst einmal wirklich den Ratschlag

    SeppJ schrieb:

    Lies dir mal mehr über Felder, Zeiger und die Standardbibliothek durch. Wenn du mit 2D-Arrays werkeln möchtest, musst du fit genug sein, um solche einfachen Fehler selber beheben zu können.

    befolgen. Es macht ja keinen Sinn, etwas zu erklären, wenn du es nicht verstehst. Wenn du das gemacht hast und ein bisschen Erfahrung gesammelt hast (Mach das wirklich! Das ist kein Scherz!), dann gehst du systematisch an das Problem heran:
    - Genaue Formulierung der Problemstellung: Was hat man? Was möchte man erreichen?
    - Genaue Definition der nötigen Datenstrukturen.
    - Formulierung des Algorithmus, wie man mit Hilfe der Datenstrukturen von der Eingabe zu der gewünschten Ausgabe kommt.

    Dave1990 schrieb:

    aber irgendwie füllt das programm die lab mit mehr als 6 zeichen

    SeppJ schrieb:

    Ich habe hier mal stillschweigend angenommen, dass du nicht wirklich nullterminierte Zeichenketten in deiner Zieldatenstruktur haben möchtest.

    DirkB schrieb:

    Stringterminierung. Die '\0' fehlt am Ende deiner Teilstrings.

    Entscheide dich, was du haben möchtest. Du mischt gerade DirkBs Tipps mit meinen. Schlag Stichworte nach, wenn du sie nicht verstehst. Gründlich!



  • ja 36 weil das
    wwwwwwwskkkwwwkwswwskwwwwwkkzwwwwwww
    Zeichen sind das ist aber mit 40 angegeben wegen L1= und am Ende ist immer noch \0
    also 40-4 wenn du es so haben willst
    ich hatte da nur einen kleinen Denkfehler
    ich habe halt noch nie Werte aus einer txt geholt und dann ein Array in das andere geschoben. der Rest ist schon klar



  • Ich habe jetzt eine Lösung.
    ist zwar unsauber aber ich kann damit weiter rechnen und das reicht mir auch.
    👍


  • Mod

    Dave1990 schrieb:

    Ich habe jetzt eine Lösung.
    ist zwar unsauber aber ich kann damit weiter rechnen und das reicht mir auch.
    👍

    Das finde ich nicht 👍 , sondern 👎 . Wenn dir unsaubere Lösungen reichen und du sogar noch damit zufrieden bist, wirst du damit später noch Probleme bekommen. Ich bin nicht hier, um dich zu erziehen, ich gebe dir diesen Kommentar nur mal so als Eigenerfahrung mit auf den Weg.



  • memcpy(&labn[0][0],&namen[0][3],6);
    memcpy(&labn[1][0],&namen[0][9],6);
    memcpy(&labn[2][0],&namen[0][15],6);
    memcpy(&labn[3][0],&namen[0][21],6);
    memcpy(&labn[4][0],&namen[0][27],6);
    memcpy(&labn[5][0],&namen[0][33],6);
    

    Das meine ich 😉

    das muss jetzt natürlich noch variable gemacht werden aber sonst kann ich damit weiter rechnen



  • laenge=sqrt(strlen(namen[1]));
    printf("\n");
    i2=3;
    for(i=0;i<6;i++){
         memcpy(&labn[i][0],&namen[0][i2],laenge);
         i2=i2+6;
    }
    

    👍



  • laenge=sqrt((strlen(namen[0]))-4);// -4 da "L1=" "\0"
    // laenge mit wurzel berechnet da es quadratsiche labs sind
    printf("\n");
    i2=3;
    for(i=0;i<laenge;i++){
       memcpy(&labn[i][0],&namen[0][i2],laenge);
       i2=i2+laenge;
    }
    

    so jetzt hab ich es aber endlich 😉


  • Mod

    Und jetzt kommt der angekündigte Schock:

    SeppJ schrieb:

    Insgesamt noch einfacher wäre es, die Daten ohne den unnötigen Zwischenpuffer direkt in lab einzulesen. Der Puffer dient schließlich nur dem Abschneiden des "L3=". Das können die Lesefunktionen aber auch direkt selber erledigen.

    Wir sparen uns das alles und ersetzen den gesamten Code durch ein einfaches fscanf. Hier noch eine ganze Menge Boilerplatecode drumherum, aber der Kern der Sache ist Zeile 22, die all das erledigt, was hier auf 3 Seiten besprochen wurde:

    #include <stdio.h>
    
    int main()
    {
      FILE *file;
      unsigned int which_lab;
      unsigned int lab_number;
      int found;
      char lab[6][6];
      int x,y;
    
      if (!(file = fopen("test", "r")))
        {
          puts("Datendatei nicht gefunden.");
          return 1;
        }
    
      puts("Welches Labyrinth?");
      scanf("%u", &which_lab);
    
      for(found = 0; 
          !found && fscanf(file, " L%u=%36[wksz]", &lab_number, lab[0]) == 2;)
        if (lab_number == which_lab)
          found = 1;
    
      if (!found)
        {
          printf("Labyrinth Nummer %u nicht gefunden.\n", which_lab);
          return 1;
        }
    
      puts("Labyrinth gefunden:");
      for(x=0; x<6; ++x)
        {
          for(y=0; y<6; ++y)
            putchar(lab[x][y]);
          putchar('\n');
        }
    
      return 0;
    }
    

    Beispieldatendatei:

    L1=wwwwwwwskkkwwwkwswwskwwwwwkkzwwwwwww
    L2=kkkkkkkswwwkkkwkskkswkkkkkwwzkkkkkkk
    L3=ssssssswssskkkskwkkwskkkkksszsssssss
    

Anmelden zum Antworten