zeile aus mehrdimensionalem feld auslesen



  • hallo leute,

    ich haette mal eine frage; ich habe ein mehrdimensionales feld, welches ich aus einer datei heraus beschreibe

    int main(void)
    {
       FILE *fp = NULL;
       int matrix[9][25];
       int matrix2 [25];
       int i,j,z;
    
       fp = fopen("test.txt","r");
       for ( i=0; i<10; i++ ) 
       {
          for ( j=0; j<10; j++ )
          {
             z = fgetc ( fp );                
             if ( z == EOF )
             {
                i = 10;
                break;
             }
             printf ( "%c", z );       
             matrix[i][j] = z;                
         }
       }
    }
    

    klappt soweit ja auch. nun steh ich allerdings vor dem problem, das ist gern nur eine bestimmte zeile bzw in meinem fall eine zufaellige zeile aus dem feld auslesen moechte.

    koennt ihr mir da evtl weiterhelfen?! bin blutiger anfaenger 🙂

    dank schonmal

    gruss matte


  • Mod

    matte82 schrieb:

    klappt soweit ja auch.

    Ich habe da ja so meine Zweifel, ob das wirklich solide ist. Aber lassen wir das mal als Hinweis stehen, das mal genauer zu testen und kommen stattdessen zur eigentlichen Frage:

    nun steh ich allerdings vor dem problem, das ist gern nur eine bestimmte zeile bzw in meinem fall eine zufaellige zeile aus dem feld auslesen moechte.

    koennt ihr mir da evtl weiterhelfen?!

    matrix[gewuenschte_zeile] ?



  • Generiere eine zufällige Zahl von 0 bis Anzahl eingelesener Zeilen -1.
    Diese Zahl ist der Index deiner zufälligen Zeile.
    Mit srand initialisierst du einmalig den Zufallsgenerator und mit rand lässt
    du dir zufällige Zahlen generieren.
    http://www.cplusplus.com/reference/cstdlib/srand/
    http://www.cplusplus.com/reference/cstdlib/rand/

    Kontrolliere mal deinen Index i, der darf für den Array-Zugriff maximal 8 werden.
    Am einfachsten bekommst du einen zufälligen Index im Bereich von 0 bis i-1 mit

    int random_index;
    srand ((unsigned)time(NULL));
    random_index = rand % anzahl_zeilen; // anzahl_zeilen, irgendwo als Integer definiert, enthält die Anzahl der eingelesenen Zeilen in der Matrix.
    


  • danke schonmal bis dahin.

    das mit der zufallszahlt ist mir schon schon klar bzw wie ich die erstelle. das waere erstmal nicht das ding.
    nur bin ich mir nicht ganz sicher, wo und wie ich ddie abfrage mit der zufallszahl in meinen schleifen einbinde, dass er zum richtigen zeitpunkt die schleife verlaesst und den inhalt des feldes mitnimmt



  • Wie oft soll eine zufällige Zeile gelesen werden, einmalig und dann längere Zeit nichts?
    Dann brauchst du auch keine

    int matrix[9][25];
    

    dann reicht auch eine

    int zeile[25];
    

    Dann musst du eben so lange einlesen, bis random_index an der Reihe ist und dann abbrechen oder die Position in der Datei mit fseek oder fsetpos berechnen.

    Willst du mehrmals ne zufällige Zeile, lohnt es sich erst die Matrix komplett einzulesen und dann erst den zufälligen Index zu generieren.

    Ein paar Infos mehr könntest du schon angeben, wozu das alles gut sein soll, dann müssen wir nicht so viel raten.



  • ok, mein eigentliches programm ist folgendes;
    ich moechte das spiel woerter raten erstellen. nun soll der spieler die woerter aus ner datei auslesen. damit er, wenn er ein wort richtig geloest hat und ein neues wort moechte, nicht jedes mal die datei neu einlesen muss, wollte ich die woerter alle erstmal in einem feld ablegen.



  • matte82 schrieb:

    ok, mein eigentliches programm ist folgendes;
    ich moechte das spiel woerter raten erstellen. nun soll der spieler die woerter aus ner datei auslesen. damit er, wenn er ein wort richtig geloest hat und ein neues wort moechte, nicht jedes mal die datei neu einlesen muss, wollte ich die woerter alle erstmal in einem feld ablegen.

    Das liest sich doch schon mal sehr vernünftig.
    Allerdings passt dein Datentyp

    int matrix[9][25]
    

    nicht zu deinem Vorhaben.
    Dafür wäre in erster Näherung

    char wordlist[9][25]
    

    besser geeignet.
    Nachdem die Wörter eingelesen sind, generierst du den zufälligen Index
    und schon hast du das zufällige Wort mit wordlist[random_index].



  • ok, das mit dem datentyp stimmt, den hab ich erstmal aus irgendnem grund ausser acht gelassen.

    allerding ist mein eigentliches problem, dass ich eben an dieser stelle hier haenge 😞

    Nachdem die Wörter eingelesen sind, generierst du den zufälligen Index

    ich weiss eben nicht, wo ich das in meiner schleife am besten abfrage



  • Das brauchst du in diesem Fall in die von dir gepostete Schleife nicht einzubauen, dort wäre es fehl am Platz.
    Lies erst die Wortliste ein und bestimme erst dann das zufällige Wort.
    Am besten lagerst du das Einlesen in eine separate Funktion aus und
    dann kannst du dein Programm übersichtlicher erweitern.



  • Wie ist deine Wortliste-Datei aufgebaut?
    Vorteilhaft wäre pro Wort eine Zeile, dann kannst du jedes Wort aus der Datei zeileneweise mit fgets einlesen.
    http://www.cplusplus.com/reference/cstdio/fgets/



  • char wordlist[9][25]
    

    lade dir mal ne vernünftige wortliste runter und liest sie dynamisch ein,
    dann wird es mit dem wörterraten nicht so schnell langweilig.


Anmelden zum Antworten