Datasets in Output.txt schreiben



  • Hallo 🙂

    stehe vor einer weiteren Aufgabe, glaube aber, dass der Code richtig ist, wollte hiermit aber nochmal sicher gehen. Hier ist die Aufgabe:

    Schreibe ein Programm, welches n Datasets in eine leere Datei mit dem Namen 'output.txt' schreibt. Ein Dataset besteht aus x (integer), y (integer), z (integer) und r (float).
    Die Anzahl (n) der Datasets und die Werte der Datasets werden per Konsole eingegeben. Zuerst wird der Nutzer gefragt, wieviele Datasets er eingeben möchte (input von n). Anschließend wird er gefragt, welche Werte die Datasets haben. Die Datasets sollen Zeile für Zeile in die Datei geschrieben werden, in folgender Form:
    x;y;z;r;

    Folgende Hinweise sind uns gegeben:
    int fprintf( FILE *fp, const char * format, ...)
    Schreibt ein formatiertes String zur Datei, auf die fp verweist.
    Can wie printf benutzt werden.

    int sprintf(char *str, const char * format, ...)
    Schreibt einen formatierten String in einen String (array of chars), wo str hindeutet.
    Der Buffer muss groß genug sein, um das komplette resultierende String zu speichern.

    Soweit so gut. Habe es so verstanden, dass ein Dataset ein Array sein darf und habe, wie die Aufgabe es verlangt, eine Datei angelegt und immer wieder in diese reingeschrieben. So sieht es aktuell aus:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    int n,i;
    char dataset[5];
    int x,y,z; float r;
    dataset[0]=x;
    dataset[1]=y;
    dataset[2]=z;
    dataset[3]=r;
    FILE *fp;    
    fp=fopen("output.txt","w");
    printf("How many datasets would you like to enter?\n");
    scanf("%d",&n);
    
    for(i=1; i<=n; i++)
    {
        printf("Enter value %d of x:\n",i);
        scanf("%d",&x);
        printf("Enter value %d of y:\n",i);
        scanf("%d",&y);
        printf("Enter value %d of z:\n",i);
        scanf("%d",&z);
        printf("Enter value %d of r:\n",i);
        scanf("%f",&r);
        fprintf(fp, "%d; %d; %d; %f;\n", x,y,z,r);
    }
    fclose(fp);
    
    return 0;    
    }
    

    Erhalte keine Fehlermeldungen, der Loop funktioniert, habe allerdings nur den Online-Compiler benutzt und kann deswegen nicht sagen, ob die Sachen tatsächlich in eine Output.txt geschrieben werden. Wie kann ich das nachvollziehen?



  • Tergo schrieb:

    Erhalte keine Fehlermeldungen, der Loop funktioniert, habe allerdings nur den Online-Compiler benutzt und kann deswegen nicht sagen, ob die Sachen tatsächlich in eine Output.txt geschrieben werden. Wie kann ich das nachvollziehen?

    Na, indem du C-Compiler und Toolchain lokal ausführst, damit eine Exe baust und sie laufen lässt.

    Anders wird es kaum gehen. 🙂



  • Okay, werde das dann morgen versuchen 🙂
    Sieht der Code denn generell in Ordnung aus, um das zu erfüllen, was verlangt war?



  • Tergo schrieb:

    Okay, werde das dann morgen versuchen 🙂
    Sieht der Code denn generell in Ordnung aus, um das zu erfüllen, was verlangt war?

    Auf den ersten Blick ist mit "char dataset[5];" etwas faul.
    Du weist den einzelnen Elementen ints zu. Dabei müsste der Compiler schon meckern. Und benutzt wird das Array weiter gar nicht. 😞



  • Andromeda schrieb:

    Habe es so verstanden, dass ein Dataset ein Array sein darf

    Falsch verstanden.
    Ein Array besitzt nur Elemente von demselben Typ. Du hast aber verschiedenen Typen (int und float).

    Der Wertebereich von char ist (meist) kleiner als der von int und nicht für Fließkommazahlen geeignet.

    Bei den Zeilen 9 bis 12 muss de Compiler Warnungen ausgeben.
    Wenn das nicht so ist, musst du den Warnlevel ändern.



  • Habe jetzt nochmal bisschen daran gewerkelt und gedacht, dass man Arrays ja dann für diese Aufgabe quasi gar nicht benötigt. Ich könnte doch einfach vier Variablen deklarieren, diese im Loop nach und nach abfragen und dann in die Output.txt eintragen, oder? (Erhalte jetzt weder Fehler noch Warnungen)

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    int n,i;
    int x,y,z; float r;
    FILE *fp;    
    fp=fopen("output.txt","w");
    printf("How many datasets would you like to enter?\n");
    scanf("%d",&n);
    
    for(i=1; i<=n; i++)
    {
        printf("Enter value %d of x:\n",i);
        scanf("%d",&x);
        printf("Enter value %d of y:\n",i);
        scanf("%d",&y);
        printf("Enter value %d of z:\n",i);
        scanf("%d",&z);
        printf("Enter value %d of r:\n",i);
        scanf("%f",&r);
        fprintf(fp, "%d; %d; %d; %f;\n", x,y,z,r);
    }
    fclose(fp);
    
    return 0;    
    }
    


  • Habe den Code nun lokal mit MinGW compiliert und die Datei ausgeführt und Tada: eine Output.txt auf meinem Desktop mit exakt den Angaben, die ich eingegeben habe, natürlich inklusive Zeilenumbruch. Allerdings: bei den Hinweisen zu der Aufgabe stand noch sprintf als Notiz, das hatte ich nun gar nicht reingebracht, wüsste auch gar nicht wie. Bräuchte ich hier auch nicht, oder?



  • Wahrscheinlich soll zuerst die Eingabe mit sprintf in einen Puffer geschrieben werden, der dann in einem Rutsch in die Datei geschrieben wird.



  • Habe meinen Tutor gefragt, er hat gesagt, es sei nicht notwendig beide Funktionen zu verwenden 🙂


Anmelden zum Antworten