File(Input u. Output)



  • Gegenfrage: Was bringt es dir überhaupt, deine Zwischenergebnisse in eine Datei zu speichern? DAfür verwendet man für gewöhnlich Arrays.

    Zu deiner Frage: Der erste Teil (Zeile 16 bis 28) öffnet die Datei "Seiten.csv" zum Schreiben, füllt sie mit Werten und schließt sie wieder. Der zweite Teil (Zeile 30 bis 51) öffnet die selbe Datei zum Lesen und eine andere Datei "Flaeche.csv" zum Schreiben, dann werden die am Anfang geschriebenen Datei-Inhalte wieder gelesen, miteinander verrechnet und das Ergebnis in die zweite Datei geschrieben.
    (theoretisch hättest du die "Seiten.csv" auch im Modus "w+" öffnen und nach dem Schreiben zum Anfang zurückspringen können)

    PS: Du gehst nicht zufällig in die selbe Klasse wie C_Boy?



  • CStoll schrieb:

    PS: Du gehst nicht zufällig in die selbe Klasse wie C_Boy?

    entweder das oder selber user 😃

    nachtrag von mir für a ---> add sollte der vollständigkeitshalber auch aufgelistet werden, egal ob gewünscht oder nicht.



  • a steht für append (anhängen, anfügen)



  • DirkB schrieb:

    a steht für append (anhängen, anfügen)

    ok! wieder was gelehrnt 😃 wird aber sicher kein fehler sein dies selber als Add zu werten. hat ja den selben Hintergrund.



  • maik81ftl schrieb:

    nachtrag von mir für a ---> add sollte der vollständigkeitshalber auch aufgelistet werden, egal ob gewünscht oder nicht.

    Ich hatte "a" in meiner ersten Antwort erwähnt (genau wie die Read/Write-Dateimodi) und es dann auf Wunsch des TE nicht weiter vertieft. In der Anwendung funktioniert es ähnlich wie "w", aber es löscht eine vorhandene Datei nicht sondern hängt alle geschriebenenen Daten an ihr Ende an.



  • Also in der while muss immer die Ausgabe stehn?
    Für was das scanf?

    Das Flaeche=fopen "w" ist deshalb im Seiten=fopen "r", weil man zuerst die Seiten LIEST und dann berechnet ---> in ein neues Dokument SCHREIBT ??



  • Mr.Gibbs123 schrieb:

    Also in der while muss immer die Ausgabe stehn?

    Nein, was du in deine while-Schleife packst, bleibt dir überlassen. In deinem Beispiel wird das while(!feof(Seiten)) genutzt, um wirklich den gesamten Inhalt der Datei zu erfassen (und diese Abbruchbedingung macht nur Sinn, wenn du in der Schleife aus der angegebenen Datei liest).

    Für was das scanf?

    Ich sehe da kein scanf(), nur ein fscanf() - und das funktioniert genauso wie scanf, nur mit einer Datei als DAtenquelle anstelle der STandard-Eingabe.

    Das Flaeche=fopen "w" ist deshalb im Seiten=fopen "r", weil man zuerst die Seiten LIEST und dann berechnet ---> in ein neues Dokument SCHREIBT ??

    Im Prinzip richtig, aber technisch würde ich nicht unbedingt von "im Seiten=fopen "r"" sprechen - diese fopen/fclose-Kombinationen definieren keinen Gültigkeitsbereich oder ähnliches und müssen auch nicht unbedingt ineinander geschachtelt werden. Du hast einfach zwei Dateien gleichzeitig geöffnet, um mit beiden arbeiten zu können.



  • Danke!
    Ich hab jetzt ein Programm geschrieben das eine sin(x) in ein Dokument ausgibt.
    Warum brauch ich hier kein "r"?

    Vielleicht kannst du die 2 Programm ein bisschen vergleichen?

    Also hab ich das richtig verstanden immer wenn man 2 gleichzeitig öffnen will dann muss man sie "ineinander" schreiben?

    #include <stdio.h>
    #include <math.h>
    
    int main (void)
    {
    	FILE * iofile = NULL;
    	float i=0;
    	iofile = fopen("sinus1.csv","w");
    
    	if(iofile == NULL)
    	{
    		printf("enable to write");
    		exit(-1);
    	}
    
    	for(i=0.1; i<=6; i=i+0.1)
    	{
    		fprintf(iofile,"sin(%2.1f)= ; %2.4f\n",i,sin(i));
    	}
    
    	fclose(iofile);
    
    	return(0);
    }
    


  • EDIT: Ich brauch auch keine while - Wann braucht man den so ne while?



  • Mr.Gibbs123 schrieb:

    Danke!
    Ich hab jetzt ein Programm geschrieben das eine sin(x) in ein Dokument ausgibt.
    Warum brauch ich hier kein "r"?

    Weil du hier nichts aus einer Datei lesen willst 😉

    Also hab ich das richtig verstanden immer wenn man 2 gleichzeitig öffnen will dann muss man sie "ineinander" schreiben?

    Die Dateien, die du in einem Programm öffnest, sind komplett unabhängig voneinander. Es kommt ganz auf deinen Anwendungsfall an, wie du sie zueinander in Beziehung setzt.

    Mr.Gibbs123 schrieb:

    EDIT: Ich brauch auch keine while - Wann braucht man den so ne while?

    Wenn du eine Schleife hast, bei der du nur ein Abbruchkriterium kennst.
    Aber rein technisch könnte man mit einer Schleifen-Konstruktion auskommen und die for()-, while()- und do-while()-Schleifen gegeneinander austauschen.

    PS: Übrigens gehst du vermutlich vom falschen Ende an die Sprache heran - bevor du dich mit der Dateibehandlung auseinandersetzt, solltest du erstmal die wichtigsten Sprachelemente von C verstanden haben.



  • Nehmen wir mal an, du willst den Inhalt von einer Flasche (A) in eine andere Flasche (B) schütten.

    Dann musst du zuerst die Flaschen öffnen. Welche du zuerst öffnest ist dabei egal.

    Und dann schüttest du solange noch etwas in Flasche A ist in Flasche B.

    Und Solange heißt auf Englisch while.



  • Mr.Gibbs123 schrieb:

    EDIT: Ich brauch auch keine while - Wann braucht man den so ne while?

    Entweder ist dies ein breitangelegter Test, der die Geduld der Hilfesteller auf die Probe stellen soll oder keines der Programme wurde von dir geschrieben.

    Du fragst warum "r" oder "w" gesetzt wird in einem Programm (von Dir?) und hast keine Ahnung von Kontrollstrukturen (wieso kein while()) in einem Programm (von Dir?).

    Damit hast du also gar kein Problem mit einem Fehler den du nicht findest, sondern du liest irgendwelche Beispiele und verstehst gar nicht was sie bedeuten.

    Die Grundbegriffe von C/C++ sollten vorhanden sein, BEVOR man von anderen verlangt alles vorzukauen!

    Neuer Rekord: Seit 24 Tagen ist es der 1. April!



  • forenseeker schrieb:

    Die Grundbegriffe von C/C++ sollten vorhanden sein, BEVOR man von anderen verlangt alles vorzukauen!

    Ach, C wäre in diesem Forum angemessen.
    C++ ist in dem anderen Forum da oben.
    Aber C/C++ ist böse. Mach das besser nicht.


Anmelden zum Antworten