Hoffe mir kann jemand helfen



  • und was wird in den weiteren zeilen genau gemacht?
    wär gut,wenn das einer erklären könnte. 🙂



  • if(c=='\n' || i==255){  // wenn Zeilenende erreicht ist dann..
    Zeile[i]='\0';          // Stringende setzen
    i=0;                    // Index zurücksetzen
    Ausgabe(n, Zeile); /    // Funktionsaufruf, scheinbar eine Ausgabe der Zeile
    n++;                    // scheinbar Anzahl der Zeilen inkrementieren
    }else Zeile[i++]=c;     // wenn Zeilenende nicht erreicht, Zeichen anhängen
    } 
    Zeile[i]='\0';          // Stringende setzen
    Ausgabe(n, Zeile);      // Funktionsaufruf, scheinbar eine Ausgabe der Zeile
    


  • Danke,das hilft mir weiter.



  • hab das soweit verstanden.aber was ist damit gemeint,mit ein zeichen anhängen?



  • Torben888 schrieb:

    hab das soweit verstanden.aber was ist damit gemeint,mit ein zeichen anhängen?

    Aus der Datei wird ein Zeichen nach dem anderen gelesen, solange das Zeichen nicht das Ende der Zeile makiert (\n), wird das neu eingelesene Zeichen in das Array Zeile gespeichert. Dabei wird jeweils der Index (i) inkrementiert, so dass das erste Zeichen nach Zeile[0] gespeichert wird und alle folgenden dahinter "angehängt" werden.

    Datei: "Hallo Welt !!!\n"

    Zeile[0] = 'H'
    Zeile[1] = 'a'
    ...
    Zeile[13] = '!'
    Zeile[14] = '\n'



  • ach so ,ja das ist klar.aber wird das nicht schon bei der if-bedingung gemacht?ich meine,da wird ja auch die datei zeichenweise eingelesen.



  • Torben888 schrieb:

    ach so ,ja das ist klar.aber wird das nicht schon bei der if-bedingung gemacht?ich meine,da wird ja auch die datei zeichenweise eingelesen.

    while((c=fgetc(DatZeiger))!=EOF){   // es wird jeweils ein Zeichen eingelesen bis das Dateiende erreicht ist
    if(c=='\n' || i==255){              // ist Zeilenende erreicht ?
    Zeile[i]='\0'; 
    i=0; 
    Ausgabe(n, Zeile); / 
    n++; 
    }else                               // Zeilende noch nicht erreicht 
        Zeile[i++]=c;                   // bereits eingelesenes Zeichen wird im Array abgelegt
    }
    


  • ach so.jetzt hab ich es verstanden.vielen dank



  • Du solltest deinen Code leserlicher formatieren (einrücken, nicht alles in eine Zeile), dann treten viele Verständnisprobleme gar nicht erst auf:

    DatZeiger=fopen(Datei, "r"); 
    if(DatZeiger==NULL)
    { 
        printf("Fehler beim lesen der Datei %s!", Datei); 
    }
    else
    { 
        while((c=fgetc(DatZeiger))!=EOF)
        { 
            if(c=='\n' || i==255)
            { 
                Zeile[i]='\0'; 
                i=0; 
                Ausgabe(n, Zeile); / 
                n++; 
            }
            else 
                Zeile[i++]=c; 
        } 
        Zeile[i]='\0'; 
        Ausgabe(n, Zeile);
        fclose(DatZeiger); 
    }
    


  • ich hab noch ein anderes kleines problem:
    void Ausgabe(int n, char *s){
    int check=0; //Anzahl der Zahlen
    int fehlercode; //für Fehlerfall (0= kein Fehler)
    float new[8]; //Array für die Parameter
    char *pch; //Zeiger auf das erste Zeichen eines Wortes in der Zeile

    printf("-----------------------\n"); //Trennzeile
    printf("Zeile: %3d\n", n); //Zeile ausgeben

    pch = strtok(s, " "); //Zeiger auf das erste Wort setzen und am Ende der Zeile "NULL" anhängen
    while (pch != NULL && check<8) //solange nicht Zeilenende und weniger als 8 Wörter
    {
    new[check++]=atof(pch); //Wort auf das der Zeiger zeigt in eine Zahl wandeln
    pch = strtok (NULL, " "); //Zeiger auf das nächste Wort in der Zeile setzen

    das ist zwar schon kommentiert,ich weiss aber trotzdem nicht,was dieses pch=strtok bedeuten soll?warum soll eine null angehängt werden?



  • Torben888 schrieb:

    ich hab noch ein anderes kleines problem:
    void Ausgabe(int n, char *s){
    int check=0; //Anzahl der Zahlen
    int fehlercode; //für Fehlerfall (0= kein Fehler)
    float new[8]; //Array für die Parameter
    char *pch; //Zeiger auf das erste Zeichen eines Wortes in der Zeile

    printf("-----------------------\n"); //Trennzeile
    printf("Zeile: %3d\n", n); //Zeile ausgeben

    pch = strtok(s, " "); //Zeiger auf das erste Wort setzen und am Ende der Zeile "NULL" anhängen
    while (pch != NULL && check<8) //solange nicht Zeilenende und weniger als 8 Wörter
    {
    new[check++]=atof(pch); //Wort auf das der Zeiger zeigt in eine Zahl wandeln
    pch = strtok (NULL, " "); //Zeiger auf das nächste Wort in der Zeile setzen

    das ist zwar schon kommentiert,ich weiss aber trotzdem nicht,was dieses pch=strtok bedeuten soll?warum soll eine null angehängt werden?

    Du solltest bei deinen Posts mal die optischen Möglichekeiten des Forums ein wenig mehr nutzen, Code läßt sich wesentlich angenehmer lesen, wenn er nicht so im Text untergeht:

    void Ausgabe(int n, char *s){
    	int check=0; //Anzahl der Zahlen
    	int fehlercode; //für Fehlerfall (0= kein Fehler)
    	float new[8]; //Array für die Parameter
    	char *pch; //Zeiger auf das erste Zeichen eines Wortes in der Zeile
    
    	printf("-----------------------\n"); //Trennzeile
    	printf("Zeile: %3d\n", n); //Zeile ausgeben
    
    	pch = strtok(s, " "); //Zeiger auf das erste Wort setzen und am Ende der Zeile "NULL" anhängen
    	while (pch != NULL && check<8) //solange nicht Zeilenende und weniger als 8 Wörter
    	{
    		new[check++]=atof(pch); //Wort auf das der Zeiger zeigt in eine Zahl wandeln
    		pch = strtok (NULL, " "); //Zeiger auf das nächste Wort in der Zeile setzen
    

    So wie ich den Code verstehe wird keine NULL angehängt, sondern nur der Zeiger zeigt auf das erste Wort gesetzt.
    Kleiner Hinweis:
    NULL != 0 (NULL entspricht nicht der Zahl 0)
    NULL wird bei Zeigern (Pointer) verwendet, wenn der Zeiger auf "nichts" mehr zeigt.



  • ja hast recht,sieht besser aus.
    ach so,das NULL bedeutet das zeilenende?
    und was macht dieses strtok genau?
    wenn bei pch das zeilenende noch nicht erreicht ist und weniger als 8 wörter sind,wandelt er was um.was genau?



  • Scheinbar sind in der Datei Kommazahlen gespeichert, die mit der Funktion umgewandelt (von String in Zahl) und in das Array new abgelegt werden sollen.



  • ok.hab ich verstanden. die kommazahlen sind also als string in der datei abgelegt?
    und was macht genau das strtok vorher?



  • Ich fürchte du lernst nichts, wenn wir dir jetzt weiterhin schritt für schritt das Programm auseinanderrupfen und erklären. Les' dir doch erst mal durch, was im internet über strtok steht und wenn du dann noch fragen hast, kann man dir wesentlich besser helfen.



  • ok.alles klar



  • Hallo,

    und ich würde in allen Beiträgen den Code nicht mit [code](Code), sondern mit [cpp](C/C++) formatieren 😉

    MfG,

    Probe-Nutzer



  • Probe-Nutzer schrieb:

    Hallo,

    und ich würde in allen Beiträgen den Code nicht mit [code](Code), sondern mit [cpp](C/C++) formatieren 😉

    MfG,

    Probe-Nutzer

    Wo du recht hast, hast du recht. Asche über mein Haupt.


Anmelden zum Antworten