Hoffe mir kann jemand helfen



  • 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