Datei auslesen und in Array Speichern (C)



  • Hallo,
    bin neu hier und hoffe auch im richtigem Forum.
    Mein Problem: Ich habe einte Date "Textdatei.txt", die ich auslese. Da steht folgendes drin:
    Start
    Wort1
    Wort2
    Ende
    genau so in dieser reihenfolge. Ich kann sie auslesen und ausgeben. Allerdings versuche ich das in ein Array zu speichern und NUR ein Wort per Zufall auszugeben. Und da stecke ich leider fest!! Hoffe ihr könnt mir helfen!!
    Hier der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define ZEILENLAENGE 200
    
    int main(int argc, char **argv)
    {
       FILE *datei;
       char puffer[ZEILENLAENGE];
       char filename[100];
       char worte[20][50];//Für 20 Wörter mit bis zu 50Zeichen (erstmal)
    
       printf("Bitte Pfad angeben: ");
       scanf("%s", filename);
    
       printf("\n");
       if( (datei = fopen(filename,"r")) == NULL) 
       {
       fprintf(stderr, "\n\nFEHLER:\n!! %s !!\nKann nicht g\231ffnet werden\n", filename);
         return EXIT_FAILURE;
       }
    
       while(fgets(puffer, ZEILENLAENGE, datei))
       {
    	fputs(puffer, stdout);
       }
    
      printf("\n\n");
      return 0;
    }
    

    Ich kriegs nicht hin, in der while Schleife das in ein Array zu packen. Habt ihr ein Tip??
    Das 2.Problem ist, NUR ein Wort, mit (s)rand() auszugeben, das kann aber in eine andere Methode.
    Hoffe ihr könnt mir helfen!! Komme da garnich mehr weiter 😕
    Dank schonmal!!

    MfG
    Manda



  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    #define ZEILENLAENGE 200
    #define ANZAHL 20
    int main(void)
    {
       FILE *datei;
       char puffer[ZEILENLAENGE];
       char filename[100];
       char worte[ANZAHL][ZEILENLAENGE];//Für 20 Wörter mit bis zu 200 Zeichen 
       int i, j;
       printf("Bitte Pfad angeben: ");
       scanf("%s", filename);
    
       printf("\n");
       if( (datei = fopen(filename,"r")) == NULL)
       {
       fprintf(stderr, "\n\nFEHLER:\n!! %s !!\nKann nicht g\231ffnet werden\n", filename);
         return EXIT_FAILURE;
       }
    
       for (i = 0; i < ANZAHL; i++)
           if (fgets(puffer, ZEILENLAENGE, datei))
                strcpy(&worte[i][0], puffer);
                /* oder: memcpy(&worte[i][0], puffer, strlen(puffer)+1);*/
           else
               break;
    
        srand((unsigned)time(NULL));
    
        fputs(&worte[rand()%4][0], stdout); // Zufällige Ausgabe (1 aus 4 Worten)
    
      return 0;
    }
    

    :xmas1:



  • Hi,

    Danke für deine Hilfe!!! hab noch eine kleinigkeit...ich übergebe das zufallswort an eine Funktion, "Galgenraten" das funktioniert auch soweit alles. ich kann die buchstaben einzeln raten,
    ABER: das letzte zeichen wird noch mitgenommen, wie kriege ich das weg??
    Bsp.:
    Liste sieht so aus:
    Start
    Worteins
    Wortzwei
    Ende
    Zufallswort, sagen wir mal: Wortzwei
    dann starte ich Galgenraten damit und es stehen aber: --------- also ein strich mehr als buchstaben vorhanden sind.
    Könnte man das letzte zeichen nicht irgendwie weg kriegen??
    hoffe ich konnte mich verständlich ausdrücken 🙄
    Da noch eine idee??

    Gruß



  • Hi!
    fgets() liest Dir jeweils die gesamte Zeile einschliesslich
    des Newline Zeichens ('\n') ein. Bei Dir also Wort + 1 Zeichen.
    Um dieses Zeichen zu beseitigen - kleine Hilfsfunktion z. B. :

    char* noline(char* ptr)
    {
        int i = strlen(ptr)-1;
        if  (ptr[i] == '\n' )
            ptr[i] = 0;
        return ptr;
    }
    
    ...
    ...
            if (fgets(puffer, ZEILENLAENGE, datei))
                strcpy(&worte[i][0], noline(puffer));
    

    Dein Problem sollte gelöst sein.

    MFG
    :xmas1:



  • Hi,

    DANKE!! jetzt tuts auch das was es tun soll!!! Hab noch mal ne andere Frage....
    ich weis nicht was ich falsch mache :confused...
    ich versuche nur ein wort einzulesen und in ein array zu speichern. das soll allerdings versteckt gehen, also die zeichen durch * ersetzen.
    hier der Code:

    #define BUCHSABEN 40
    char eingabe;
    char wort[BUCHSTABEN];
    char replace = '*';
    char wort[BUCHSTABEN];
    char loesung[BUCHSTABEN];
    
           printf("\nBitte Wort eingeben: ");
        //scanf("%s", wort);
        while( (eingabe = getch()) != '\n')
        {
            wort[i] = eingabe;
            i++;
            printf("*");
        }
        strcpy(loesung,wort);
    

    Problem: er zeigt nur * an, kann es nicht durch [enter] beenden, also das wort abspeichern.
    Was mach ich falsch??

    MfG
    Manda


Anmelden zum Antworten