tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
441
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    henri97 henri97 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    2
    Hallo,

    kann mir jemand erklären warum er die Datei nicht im Array data speichert ?:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    char word[20],data2[20], data[20], temp[80];
    int len=0, lenwhil=0, zahl=0, var;
    bool equal;
     
    readstring(void)
    {
    printf("Wort eingeben: ");
    scanf("%s", &word);
    }
     
    readfile(void)
    {
    FILE *file=fopen("C:/Users/Henri/Desktop/words.txt", "r");
     
    while(feof(file)==0)
    {
    fgets(data2, 20, file);
    printf("%s", data2);
    data[20]=data[20];
    var++;
    }
     
    printf("%s", data);
     
    fclose(file);
    }

    Header usw. hab ich eingebunden

    Vielen Dank Schonmal
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi und Willkommen bei tutorials.de

    Das die Header drin sind, ist klar. Sonst kannst du das Programm gar nicht kompilieren/starten.

    Aber im Code sind einige Probleme/Fehler:

    Funktionen sollten/müssen Returntypen haben.
    Wenn man nichts returnen will, dann "void".

    Beim scanf in readstring gehört das & weg! Array!

    Beim gleichen scanf: Eingaben mit Leerzeichen werden so nicht genommen.
    Nimm fgets.

    Im readfile steht ein "data[20]=data[20]"
    Wozu ist das gut?
    Du weist einer Variable ihren eigenen Wert wieder zu?
    Die Zeile könntest du genau so gut weglassen.

    Außerdem gehen die Indizes von data[20] nur von 0 bis 19.
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19.
    Sind genau 20 Stück.
    data[20] ist also etwas, das gar nicht mehr zu data gehört.
    Irgendeine andere Variable etc., die im Speicher danach kommt.

    Nach der while-Schleife gibst du data aus,
    obwohl im ganzen readfile nichts darin gespeichert wurde.

    Auf globale Variablen sollte man verzichten.
    Es gibt doch Funktionsparameter.

    Zu diener Frage: Warum sollte die komplette Datei in data gespeichert werden?
    Steht doch nicht im Code.

    Gruß
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    henri97 henri97 ist offline Grünschnabel
    Registriert seit
    Sep 2011
    Beiträge
    2
    Zitat Zitat von sheel Beitrag anzeigen
    Funktionen sollten/müssen Returntypen haben.
    Wenn man nichts returnen will, dann "void".
    Danke dafür, aber ich möchte doch nichts returnen deswegen ist es void.

    Zitat Zitat von sheel Beitrag anzeigen
    Beim scanf in readstring gehört das & weg! Array!
    Ich habe gerade gedacht das müsste man machen.

    Zitat Zitat von sheel Beitrag anzeigen
    Beim gleichen scanf: Eingaben mit Leerzeichen werden so nicht genommen.
    Nimm fgets.
    Ja das weis ich.

    Zitat Zitat von sheel Beitrag anzeigen
    Im readfile steht ein "data[20]=data[20]"
    Wozu ist das gut?
    Du weist einer Variable ihren eigenen Wert wieder zu?
    Die Zeile könntest du genau so gut weglassen.
    Es sollte eigentlich heißen "data[20]=data2[20]" ,das war ein versehen.
    Weil dann müsste er es doch zuweisen oder nicht, weil wenn ich es ändere gibt er es weiter unten in printf trotzdem nicht aus?!


    Zitat Zitat von sheel Beitrag anzeigen
    Außerdem gehen die Indizes von data[20] nur von 0 bis 19.
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19.
    Sind genau 20 Stück.
    data[20] ist also etwas, das gar nicht mehr zu data gehört.
    Irgendeine andere Variable etc., die im Speicher danach kommt.
    Das weiß ich auch.

    Zitat Zitat von sheel Beitrag anzeigen
    Nach der while-Schleife gibst du data aus,
    obwohl im ganzen readfile nichts darin gespeichert wurde.
    Erklärt sich durch weiter oben.

    Zitat Zitat von sheel Beitrag anzeigen
    Auf globale Variablen sollte man verzichten.
    Es gibt doch Funktionsparameter.
    Warum dass ?

    Zitat Zitat von sheel Beitrag anzeigen
    Zu diener Frage: Warum sollte die komplette Datei in data gespeichert werden?
    Steht doch nicht im Code.
    Erklärt sich auch durch weiter oben, bzw. ich möchte aber die ganze Datei in das Array speichern, habs aber probe weise mit nur der ersten Zeile probiert, was aber auch nicht geklappt hat


    Wenn ich aber schreibe:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    char word[20],data2[20], data[20][6], temp[80];
    int len=0, lenwhil=0, zahl=0, var;
    bool equal;
     
    readstring(void)
    {
    printf("Wort eingeben: ");
    scanf("%s", word);
    }
     
    readfile(void)
    {
    FILE *file=fopen("C:/Users/Henri/Desktop/words.txt", "r");
     
    while(feof(file)==0)
    {
    fgets(data2, 20, file);
    printf("%s", data2);
    data=data2;
    printf("%s", data[20][var]);
    var++;
    }
     
    fclose(file);
    }

    kommt aber der Compilerfehler : "incompatible types when assigning to type 'char[20][6]' from type 'char"
    Was bedeutet das ?
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Returntypen: Du hast aber eben kein void, du hast da gar nichts.
    Müsste so ausschauen:
    Code cpp:
    1
    
    void readfile(void)
    Bei der anderen Funktion genauso.

    & beim scanf: Nur bei Einzelvariablen (bei denen Pflicht).
    Arrays sind aber schon von Anfang an Pointer.

    scanf kommt nicht mit Leerzeichen klar:
    Wenn du das weißt und das absichtlich so machst, gut.

    0-19: wenn dir das klar ist, warum greifst du dann trotzdem
    auf [20] zu? bei [19] ist Schluss!

    Und auch wenn da [19] stehen würde (und data2) kopierst du nur einen Byte der 20. Um alles zu kopieren: Entweder eine Schleife bis '\0' oder einfach
    Code cpp:
    1
    
    strcpy(data, data2);

    Dazu, dass am Schluss die komplette Datei in data sein soll:
    In der Schleife speicherst du jede Zeile in data2 und löscht damit den alten Inhalt. Wenn du data2 auch noch in data kopierst wirst du am Schluss nur die letzte Zeile haben.

    Zu den globalen Variablen vs. Parameter:
    Glob. Variablen sind einfach schlechter Stil. Sie funktionieren, aber...
    man sollte Code möglichst so schreiben, dass man Teile davon in anderen Programmen weiterverwenden kann, ohne alles von vorne machen zu müssen. Indem sich Funktionen auf glob. Var. verlassen erreichst du genau das Gegenteil und machst dir so selbst mehr Arbeit.

    Zum neuen Code: Warum ist data auf einmal [20][6]?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. Lesen ein txt datei zu Array
    Von koddy013 im Forum Java
    Antworten: 10
    Letzter Beitrag: 07.05.10, 17:26
  2. Antworten: 1
    Letzter Beitrag: 03.08.07, 15:24
  3. xml datei in array lesen
    Von djnelly im Forum PHP
    Antworten: 2
    Letzter Beitrag: 23.08.06, 11:26
  4. Antworten: 1
    Letzter Beitrag: 19.10.04, 17:23
  5. Antworten: 7
    Letzter Beitrag: 11.05.02, 15:40

Stichworte