Programm umschreiben



  • Ich bin Neuling im Bereich C-Programmieren.

    Ich habe eine Aufgabe von meinem Dozent bekommen. Ich soll mit Hilfe einer Datenstruktur x,y und z für einen Punkt einlesen und unter einem Dateinamen speichern.Habe ich alles gemacht (leider nur mit Hilfe, jedoch meinte der Dozent das dies normal sei.).
    So nun habe ich die Punkte eingelsen und mit diesen zwei Funktion ausgegeben.

    void readPrintPoints(FILE *file)
    {
      POINT pt;
      while(fread(&pt,sizeof(POINT),1,file))
        printPoint(pt);
      return;
    }
    

    und

    void printPoint(POINT pt)
    {
      printf("point (x, y, z): %.2f %.2f %.2f\n",pt.x,pt.y,pt.z);
    }
    

    Jetzt meinte er das ich nun die Funktion void printPOINT(POINT pt) löschen soll und die ausgabe void readPrintPoints(FILE *file) machen soll.
    Er gab mir noch den Tipp das ich auf die Zahl von 1 auf 4 ändern soll da 4 Punkte gespeichert werden sollen. Und zum schluss meinte er noch das ich es mit einem Array machen solle das dann via einer Schleife die Werte ausgibt. Von einem count hat er auch geredet, aber ich weiß ehrlich gesagt nicht wirklich was er damit genau meint. Also wie ich damit genau arbeiten soll.

    Ich habe mich jetzt selber mit dem Skript und Internet schlau gemacht und bin jetzt selber auf dieses Ergebnis gekommen. Jedoch weiß ich jetzt nicht wo der Fehler liegt das es nicht funktioniert.

    void readPrintPoints(FILE *file)
    {
        int Punkt [4];
        int i;
    
        fread(&Punkt[i],sizeof(POINT),4,file);
        if (Punkt[i] != '\0', i--){
            printf("Punkte ausgeben %s", Punkt [i]);
        }
    
        return;
    }
    

    Mir würde auch schon ein Tipp reichen, damit ich selber darüber überlegen muss.



  • braucht ihr dazu vielleicht das ganze Programm?



  • void readPrintPoints(FILE *file)
    {
      int i,x;
      POINT ptarray[4];
    
      /* Versuch, 4x POINT auf einmal zu lesen */
      x = fread(ptarray,sizeof(POINT),4,file);
      /* x enthält die Anzahl der erfolgreich gelesenen POINTs */
    
      for(i=0;i<x;i++)
        printf("point (x, y, z): %.2f %.2f %.2f\n",ptarray[i].x,ptarray[i].y,ptarray[i].z);
    }
    

    Wobei die "Aufgabenstellung" deines Dozenten Unsinn ist; eigene Funktionen für getrennte Aufgaben sind immer das richtige Design.



  • noses schrieb:

    Jedoch weiß ich jetzt nicht wo der Fehler liegt das es nicht funktioniert.

    Es ist nicht nur ein Fehler.

    Welchen Wert hat i?

    Du willst etwas vom Typ POINT einlesen.
    Von welchem Typ ist deine Variable?

    Was soll das != '\0' ?

    Passt %s mit dem Typ von Punkt[ i] zusammen?



  • Okay, hab i=0 gesetzt.
    Meine Variablen sind von Float. Also die x,y, und z meinst? Die sind in der Struktur als float deklariert. Mit dem != '\0' hatte ich gemeint das wenn es Null Bytes hat dann bricht er ab. Aber das ist ja komplett falsch. Das ist der Null Charakter. Der nächste zu beschreibende Byte in einem Array.
    Ich dachte erhlich gesagt das %s zu Punkt[i] passt. Aber es ist wohl %f richtig?



  • @Wutz,

    Ich soll viermal auf einmal POINT einlesen? hm, hast du da vielleicht ein Hinweis wie es funktionieren könnte oder eine Internetseit zufällig?



  • noses schrieb:

    Meine Variablen sind von Float. Also die x,y, und z meinst?

    Nein, ich meint die ganze struct .

    noses schrieb:

    Ich dachte erhlich gesagt das %s zu Punkt[i] passt.

    Woher nimmst du dieses Gedachte?

    noses schrieb:

    Ich soll viermal auf einmal POINT einlesen?

    Das wird doch beim Code von Wutz gemacht.

    Wenn du eine Refernz zu den Standardfunktionen suchst: http://www.cplusplus.com/reference/clibrary/


Log in to reply