Aus Datei lesen - problem



  • joa...
    ich hab da fettes problem wenn ich aus ner .txt lese und dies in int verb[2][10] schreiben möchte ...
    er lest es zwar auf den array ein die wörter aber am schluss steht auf z.b. verb[1][0] und verb[1][1] und verb[1][2], usw. überall das letzte wort das in der .txt steht

    eine .txt z.b.:

    hallo
    das
    ist
    dumm

    steht überall dann in dem array wo ichs eingelesen hab "dumm". 😕

    hier der code:

    #include <stdio.h>
    #define MAX 500

    int main() {
    FILE* datei;
    int verb[2][10];
    char puffer[MAX];
    int i=0;

    datei=fopen("1.txt", "r");

    while(fgets(puffer,MAX,datei)){
    verb[1][i] = puffer;
    printf("%s", verb[1][i]);
    i++;
    }

    printf("%s", verb[1][0]);
    printf("%s", verb[1][1]);
    printf("%s", verb[1][2]);

    return 0;
    }



  • B4stl3r schrieb:

    int verb[2][10];
        char puffer[MAX];
        int i=0;
    
        datei=fopen("1.txt", "r");
    
        while(fgets(puffer,MAX,datei)){
            verb[1][i] = puffer;
            printf("%s", verb[1][i]);
            i++;
        }
    

    verb[1][i] ist eine Integervariable. In dieser Integervariablen speicherst Du die Adresse des char-Arrays 'puffer'. So zeigt am Ende verb[1][i] für jedes 'i', das in den Schleifendurchläufen 'drangekommen' ist, auf das char-Array 'puffer'.

    Und in 'puffer' steht am Programmende nunmal der letzte eingelesene String drin.



  • asooooo. danke vielmals ^^

    und wie muss man es umschreiben, dass ich die wörter in die verb[1][i] einlese anstatt der adresse?



  • Du musst den Typ von der Variable 'verb' anpassen und dann den Inhalt von 'puffer' mit strncpy in dein zweidimensionales Array kopieren.

    mFg,
    Körper



  • also

    char verb[2][10] machen

    und

    strcpy[(verb,puffer);

    nur ich will es in verb[1][i] reinkopieren und das geht bei strcpy nich :S

    hat wer nen code wie man den ganz oberen code (1. beitrag) so umwandelt, dass ich statt der adresse von "puffer" die wörter in die variable verb[1][i] einlese



  • erst in den puffer und dann aus dem puffer ins char-array? bisschen umständlich, wa.
    lies das doch direkt rein, wo es rein soll:
    while(fgets( verb[i][j] , MAX, datei ) ...
    aber wenn du mich fragst, ist das mit dem doppelindex-array käse, außer du hast einen guten grund dafür.



  • in wirklichkeit ist es 3 dimensional...ich hab echt guten grund dafür weil es anders so wie ichs vorhab ned geht.
    ich muss nähmlich alle verbtypen in dieses reinspeichern..das heißt:


    und das geht weiter halt mit verb[0][2] = ich zukunft

    verb[0][0] = vergangenheit
    verb[2][1] = er/sie/es in gegenwart

    das verb[0][1]>>[x]<< handelt natürlich für die wörter in den kategorien

    aber nja...komplizierte geschichte..hab auch stappeln von papier gebraucht und meine idee zu schaffen -> von einem sprechenden computerbot
    ich weis...mit meinem wissensstand und so ist das ziemlich schwer und geht anders sicher leichter...aber ich hab bereits alles am papier stehn und so mach ich das jz ^^



  • sowas ähnliches habe ich für meinen vokabeltrainer gemacht.
    da ist ein datensatz eine zeile. die zeile ist in linke und rechte spalte aufgeteilt, das trennzeichen für der spalten ist der tabulator.
    jetzt kann linke und rechte spalte zusätzlich mit einem komma in mehrere t eile geteilt werden.
    so sieht z.b. eine datei aus:
    gehen \t gehe, gehst, geht, gehen, gehen, gehen
    gehen \t to go, went, gone

    aber egal, jeder wie will er 😉



  • ja es geht noch immer nich...
    bitte helfen, um aus diesem code, der nur die adressen von "puffer" auf "verb" speichert, umzuändern dass er die wörter die in "puffer" drin stehn die von der datei kommen dann in "verb" gespeichert wird...
    es geht einfach nicht bei mir..
    pls den ganzen code dann hie reinkopieren und nich nur teile..weil das funtzt ned ^^

    #include <stdio.h>
    #define MAX 500

    int main() {
    FILE* datei;
    int verb[2][10];
    char puffer[MAX];
    int i=0;

    datei=fopen("1.txt", "r");

    while(fgets(puffer,MAX,datei)){
    verb[1][i] = puffer;
    printf("%s", verb[1][i]);
    i++;
    }

    printf("%s", verb[1][0]);
    printf("%s", verb[1][1]);
    printf("%s", verb[1][2]);

    return 0;
    }



  • Dein Problem ist, dass du einen String ausgeben möchtest, jedoch ein Integer als Parameter übergibst.

    printf("%s", verb[1][i]);
    

    muss heißen:

    printf("%i", verb[1][i]);
    

    Oder du änderst einfach (wie oben schon erwähnt) den Datentyp, was sinnvoller wäre.

    Hier noch eine kleine Hilfe: http://www.cplusplus.com/reference/clibrary/cstdio/printf/



  • es ist doch egal wie die variable "verb" ausgebe..
    wenn man das oben gennante beachtet, dass überall die gleiche adresse in "verb" gespeichert wird ist es egal wie ichs ausgebe.
    darum muss ich den datentyp ändern, doch das funktioniert nicht. Das programm stürzt einfach ab und das schöne "problemnachricht senden" kommt.

    versuch es mal mit "char" und nich mit "int"..es wird nicht funktionieren bei dem code. mit "char*" geht es zwar aber das gleiche problem wie bei "int"..
    es werden nur adressen gespeichert nicht die einzelnen wörter.

    also bitte um hilfe



  • Hi!
    Du solltest unsigned benutzen, weil es sonst bei einer negativen Adresse crasht.
    Suchst du sowas hier?

    unsigned int char_pointer_adresses[3][3] = {0};
    	char* stuff[] = { "Rock", "and", "Roll", NULL };
    	int i = 0;
    	while(stuff[i])
    		char_pointer_adresses[1][i] = stuff[i++];
    	while ( --i>= 0)
    		printf ("%s ", char_pointer_adresses[1][i]);
    

    Gruß,
    B.B.



  • ach...es geht noch immer nich...entweder gibt er zahlen aus von variable "verb" oder das letzte wort was in der .txt file steht
    der code sieht jz so aus...
    bitte DIESEN code so umändern dass er aus der .txt die WÖRTER und nich die ADRESSEN liest und das in verb[1][2] das 3. wort ([0] 1., [1] 2., [2] 3. wort) da drin steht und nich das letzte der .txt

    bitte es ist echt dringend und hänge seit ner woche an diesem prob ^^
    und pls wenn ihr lösung habt den code an meinen anpassen dass ich das sofort übernehmen kann
    wäre echt VERDAMMT nett 🙂

    #include <stdio.h>
    #define MAX 500

    int main() {
    FILE* datei;
    unsigned int verb[2][10]={0};
    char* puffer[30];
    int i=0;

    datei=fopen("das.txt", "r");

    while(fgets(puffer,sizeof(puffer),datei)){
    verb[1][i] = puffer;
    i++;
    }
    printf("%s", puffer);
    printf("%s", verb[1][0]); //gibt das letzte wort in der .txt file aus 😞
    printf("%i", verb[1][0]); // gibt irgende nummer aus..wahrscheinlich die adresse

    return 0;
    }



  • Du wirst es zwar nicht gerne hören, aber Integer-Variablen speichern keinen Text! Probiers mal so:

    char verb[2][10][30];
    

    Die 30 stellt dabei die (maximale) Länge eines Verbs (inkl. '\0') dar.

    Die Verb-Puffer-Zuweisung ist auch nicht korrekt, zumindest nicht, wenn's um Zeichenketten geht. Dafür gibt's strcpy.

    strcpy (verb[1][i], puffer);
    

    Edit: Das Sternchen bei Puffer brauchst du nicht.



  • sobald ich "char verb..." deklarier gibt es problemnachricht senden weil er die zuweisung von verb = puffer bzw. strcpy nicht schafft

    pls probiert es/probier es mal mit meinen code und strcpy und so..es wird nicht funktionieren glaube mir



  • B4stl3r schrieb:

    ach...es geht noch immer nich...

    kann so auch nicht gehen.
    du überschreibst dir die eingelesenen werte:

    while(fgets(puffer,sizeof(puffer),datei)){ 
    verb[1][i] = puffer;
    

    jedes verb[1][i] bekommt die gleiche adresse, deren inhalt immer neu überschrieben wird.
    abhilfe: du brauchst für jedes stück text einen eigenen speicherbereich.
    wozu willst du eigentlich die adressen in einem unsigned int array speichern? 😕
    lass die doch gleich im char* array drin.



  • B4stl3r schrieb:

    sobald ich "char verb..." deklarier gibt es problemnachricht senden weil er die zuweisung von verb = puffer bzw. strcpy nicht schafft

    pls probiert es/probier es mal mit meinen code und strcpy und so..es wird nicht funktionieren glaube mir

    Poste doch bitte mal den neuen Code (mit strcpy etc.), mit dem es nicht funktioniert. Bei mir geht's nämlich ohne Probleme.



  • also hab den "unsigned int verb..." in "char* " umgebessert wie empfohlen
    hab auch strcpy jz reingepackt und wie es wieder mal so ist..geht NIX
    ich will ja nich den "puffer" in den ganzen "verb" sondern in "verb[1][i]" rein und das geht nich ganz mit strcpy oder?

    naja hier der code...bei mir ist "problemnachricht" und 2 warnungen wegen "fgets" und "strcpy" wegen incompatible pointer type

    #include <stdio.h>
    #define MAX 500

    int main() {
    FILE* datei;
    char* verb[2][10]={0};
    char* puffer[30];
    int i=0;

    datei=fopen("1.txt", "r");

    while(fgets(puffer,sizeof(puffer),datei)){
    strcpy(verb[1][i],puffer);
    i++;
    }
    printf("%s", puffer);
    printf("%s", verb[1][0]);

    return 0;
    }

    bitte jz diesen code so ummogln dass das jz geht..ihr wärt echt ein schatz! ^^



  • Du solltest Dir die Beiträge mal ganz durchlesen und die Sachen richtig in die Tat umsetzen. So schwer ist das wirklich nicht.

    ...
    char verb[2][10][30];
    char puffer[30];
    ...
    

    Das funktioniert ohne Warnung(en)!



  • ähm..wie gesagt..ES GEHT NICHT!!

    bitte vorher mit meinem code probieren ob das geht was ihr da an code futzeln schreibt...
    außerdem strcpy geht sowieso nich weil ich in mehrdimensionales array schreiben will und strcpy akzeptiert nur normale chars und keine mehrdimensionalen wie

    strcpy(verb[1][i],puffer);

    da sschmiert das programm ab und mit

    strcpy(verb,puffer);

    kann ich nich weil da es nich in den einzelnen "dimensionen" gespeichert wird

    hier nochmal DER code der einfach nicht geht bzw. in "verb[1][i]" falsches drinsteht

    #include <stdio.h>
    #define MAX 500

    int main() {
    FILE* datei;
    char verb[2][10]={0};
    char puffer[30];
    int i=0;

    datei=fopen("1.txt", "r");

    while(fgets(puffer,sizeof(puffer),datei)){
    strcpy(verb[1][i],puffer);
    i++;
    }

    printf("%s", puffer);
    printf("%s", verb[1][0]);

    return 0;
    }



  • #include <stdio.h>
    #define ANZAHL 500
    #define LAENGE 40
    
    int main() {
        FILE* datei;
        char verb[ANZAHL][LAENGE]={0};
        char puffer[30];
        int i=0;
    
        datei=fopen("1.txt", "r");
    
        while(fgets(puffer,sizeof(puffer),datei)){
            strcpy(verb[i],puffer);
            i++;
        }
    
        printf("%s\n", puffer);
        printf("%s", verb[1]);
    
        return 0;
    }
    

Anmelden zum Antworten