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
-
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 mitint 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 keineint 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 Datentypint matrix[9][25]
nicht zu deinem Vorhaben.
Dafür wäre in erster Näherungchar 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.