Vorhandene Liste eingeben?



  • hi.
    hab da ein Problem..kann mir jemand den Code schicken um eine vorhandene Datei (bestehend nur aus woertern,jedes Wort in einer Zeile) in ein C Programm eingeben zu koennen. Damit mein ich, dass das Programm diese Liste dann einliest,sie speichert und dann auch ausgibt.

    danke im Voraus.

    🙂



  • Wo hängst du denn?



  • nun,ich hab zwar schon raus,wie ich das ueber die Kommandozeile machen kann,damit mein ich,ich kann einzelne Woerter auf aufforderung des Programms selbst eingeben.aber ich will ihm schon fertige listen mit 100,1000,...woertern uebergeben.aber das klappt irgendwie nicht bzw weiss ich gar net wie ich anfangen soll.hab nachgelesen,dass mans vielleicht mit fgets machen kann.



  • Richtig, mit fgets() gehts.

    Hast du schon mal was mit Dateiverarbeitung gemacht in C? Welche Funktion hast du denn zum Einlesen von der Tastatur verwendet?



  • printf("Geben  Sie %d Wörter ein.\n",MAX);
    
         for (count = 0; count < MAX; count++)
         {
             printf("Wort %d: ", count+1);
             fgets(puffer,80,stdin);
             puffer[strlen(puffer)-1] = 0;
             daten[count] = malloc(strlen(puffer)+1);
             strcpy(daten[count], puffer);
        }
    

    so sieht das mit dem Einlesen aus...nur..hmm..das geht nur fuer eine bestimmte Anzahl von Woertern. Hab mir naemlich ein MAX generiert..z.b MAX 20,..und dann zaehlt ein counter solange bis ich diese 20 Woerter eingegeben hab,dann is schluss.



  • um das jetzt aus einem file zu machen, schau dir mal folgende c-funktionen an

    fopen, fclose und das while statement

    das fgets kennst du ja bereits.

    Wenn du weist wieviele Zeilen in der Date stehen kannst du deinen Datenvektor in passender größe allokieren (siehe malloc,calloc).

    Wenn du es nicht weist ist die einfachste methode, das du 2mal daurh die datei gehst.
    das erstemale um zu zählen wievile fgets du brauchst bis zum End Of File (EOF)
    danach allokierst du den entsprechenden Datenvektor.
    Führst ein rewind (void rewind( FILE *stream ))
    aus und liest jetzt die Daten in deinen Datenvektor auf dieselbe Weise ein wie du es schon gemacht hast.

    Viel Spaß, und ruhig weiterfragen 🙂



  • Das mit der Schleifenbedingung ist leicht. Dazu brauchst du dir nur mal fgets() anschauen und was es zurückgibt, wenn das Dateiende erreicht wurde ;).

    @PAD
    Zweimal die Datei durchlesen?? Was soll das für einen Sinn machen? Wenn man eh schon malloc()/realloc() verwendet, dann kann man das auch gleich beim ersten (und eigentlich einzig sinnvollen) Durchlauf machen. Ganz einfach wird bei jeder Zeile, die gelesen wird auch Speicherplatz für diese Zeile im Array reserviert.



  • Da er den Vektor mit den Pointern auf die Strings bisher scheinbar statisch angelegt hat,
    wollte ich nicht zwei Schritte auf einmal machen. Die Fehlerwahrscheinlichkeit bei alloc/realloc
    Methode ist für ungeübte deutlich höher. Ich wollte deshalb ihm nur ein weiteres alloc zumuten.
    Ich habe ja auch von der einfachsten und nicht von der besten gesprochen.



  • @PAD
    Naja, ob das unbedingt einfacher ist 😕
    Man sollte auf jeden Fall vorher noch mind. eine Übung zur dynamischen Speicherreservierung machen, bevor man es ins komplette Projekt einbaut und sich nicht damit auskennt.



  • @AJ meinst du eine Übung reicht dafür, Optimist 😋

    Und Pointerprobleme suchen macht Arbeit, und ich bin so faul



  • @PAD
    Ich hab doch mind. (= mindestens) geschrieben 😉

    Tztztz faul auch noch sein 😃


Anmelden zum Antworten