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 ­čÖé


Log in to reply