Berechnung in Datei ausgeben?
-
Häh du kannst dich fprintf verwenden und deine Zahlenwerte für das Schreiben formatieren? Funktioniert genauso wie bei printf.
-
So sollte dann das fopen fclose schon besser positioniert sein, oder? Jetzt öffne bzw. schreibe ich die Datei vor dere Berechnung der Funktionswerte durch die for-Schleife. Wenn dann nun die Berechnung der Funktionswerte vorbei ist, dann schließe ich die Datei wieder. Stimmt das soweit?
void funktion(float anfangswert, float endwert, float dx) { float ergebnis; FILE* fp; // Zeiger auf Datenstrom der Datei fp = fopen("beispiel.txt","w"); // Datei neu erzeugen bzw. ueberschreiben, wenn es sie schon gibt for(anfangswert=anfangswert; anfangswert<=endwert; anfangswert=anfangswert+dx) { ergebnis = anfangswert * anfangswert; //printf("y = f(%f) = %f\n", anfangswert, anfangswert * anfangswert); //fprintf(fp, ergebnis); // reinen Text "Hallo!" in die Datei schreiben } fclose(fp); // Datei schließen }
Jetzt muss ich eben nur noch wissen, wie ich diese verdammten float-Zahlen in mein fprintf reinbekomme, nicht wahr?
Ich hab im Internet auch noch was zu sprintf gefunden. Könnte mich das weiterbringen?
-
Wenn ich mein fprintf genauso wie printf verwenden kann, dann sieht der Code so aus: (der Compiler jammert aber trotzdem!)
void funktion(float anfangswert, float endwert, float dx) { float ergebnis; FILE* fp; // Zeiger auf Datenstrom der Datei fp = fopen("beispiel.txt","w"); // Datei neu erzeugen bzw. ueberschreiben, wenn es sie schon gibt for(anfangswert=anfangswert; anfangswert<=endwert; anfangswert=anfangswert+dx) { ergebnis = anfangswert * anfangswert; //printf("y = f(%f) = %f\n", anfangswert, anfangswert * anfangswert); fprintf("%f", ergebnis); // reinen Text "Hallo!" in die Datei schreiben } fclose(fp); // Datei schließen }
-
Es heißt auch fprintf(fp,".......
-
Wtf stell dich nicht so an und lies mal ein Buch! Wie ich sagte geht es GENAUSO wie mit printf.
int n = 10; fprintf (pFile, "Name %i",n);
Du solltest vor dem Versuch in die Datei zu schreiben erstmal prüfen, ob die Datei auch wirklich offen ist!
Edit: Entschuldigung wenn ich zu grob bin, ich meins nicht böse. Aber du postest einfach ohne intensiv/länger nachzudenken oder nachzulesen. Das ist anstrengend.
-
Nebenbei:
bandchef schrieb:
Wie soll man schon anständig einen float in eine Kolonne von chars umwandeln?
Dafür gibt es sprintf. (vorne mit s für string)
-
Und printf(...) ist eigentlich ein fprintf(stdout,...)
-
Wtf stell dich nicht so an und lies mal ein Buch!
Edit: Entschuldigung wenn ich zu grob bin, ich meins nicht böse. Aber du postest einfach ohne intensiv/länger nachzudenken oder nachzulesen. Das ist anstrengend.
Ist nicht so schlimm; ich hab ne dicke Haut sonst hätte ich wohl hier eh nicht so lange bestand. (Bitte das jetzt auch nicht zu ernst nehmen, ja?) Was ich mir allerdings (nicht mehr) nachsagen lasse, ist, dass ich KEIN Buch lese. Ich hab mir mittlerweile eins nach intensiver Recherche und rumfragerei zugelegt!
Du solltest vor dem Versuch in die Datei zu schreiben erstmal prüfen, ob die Datei auch wirklich offen ist!
Wie soll ich das anstellen? Dazu gibt mein Buch leider gar nix her... Das einzige was ich gefunden habe ist ein kleiner Codeschnipsel welcher prüft ob die gewünschte Datei geöffnet werden kann!
void funktion(float anfangswert, float endwert, float dx) { float ergebnis; FILE* fp; // Zeiger auf Datenstrom der Datei fp = fopen("funktionswerte.txt","w"); //Datei neu erzeugen bzw. ueberschreiben, wenn es sie schon gibt if(fp == NULL) { printf("Fehler: Datei kann nicht geöffnet werden!"); break; } for(anfangswert=anfangswert; anfangswert<=endwert; anfangswert=anfangswert+dx) { ergebnis = anfangswert * anfangswert; printf("y = f(%f) = %f\n", anfangswert, anfangswert * anfangswert); fprintf(fp, "y = f(%f) = %f\n", anfangswert, ergebnis); //Funktionswerte in die Datei schreiben } fclose(fp); //Datei schließen }
-
Es ist ja auch nur ein Codeschnipsel:
FILE * pFile; pFile = fopen ("test.txt","w"); if (pFile!=NULL) { //Deine Schreiboperationen fclose (pFile); }
oder
FILE * pFile; pFile = fopen ("test.txt","w"); if (pFile==NULL) { //Fehlermeldung } else { //Deine Schreiboperationen fclose (pFile); }
Ich meinte aber nicht lies ein Buch sondern eher, lies in deinem Buch nach sry. ich kann mir halt schlecht vorstellen, dass dies nicht ausführlich behandelt wird.
-
So, ich hab jetzt mal die schon angelegt Datei im Windows-Explorer "Schreibgeschützt" und dann versucht mit meinem Programm in genau diese Datei wieder reinzuschreiben und er bringt mir jetzt wie erwartet genau die Fehlermeldunge welche im else-Zweig der if-Abfrage steht. Sehr schön. Mich freuts jedenfalls
#include<stdio.h> void eingabe(float *anfangswert, float *endwert, float *dx) { printf("Anfangswert = "); scanf("%f", &*anfangswert); printf("Endwert = "); scanf("%f", &*endwert); printf("dx = "); scanf("%f", &*dx); } void funktion(float anfangswert, float endwert, float dx) { float ergebnis; FILE* fp; //Zeiger auf Datenstrom der Datei fp = fopen("funktionswerte.txt","w"); //Datei neu erzeugen bzw. ueberschreiben, wenn es sie schon gibt if(fp != NULL) { for(anfangswert=anfangswert; anfangswert<=endwert; anfangswert=anfangswert+dx) { ergebnis = anfangswert * anfangswert; printf("y = f(%f) = %f\n", anfangswert, anfangswert * anfangswert); //Funktionswerte auf Bildschirm ausgeben fprintf(fp, "y = f(%f) = %f\n", anfangswert, ergebnis); //Funktionswerte in die Datei schreiben } fclose(fp); //Datei schließen } else { printf("Fehler: Datei konnte nicht geöffnet werden!"); } } int main () { float anfangswert = 0, endwert = 0, dx = 0; eingabe(&anfangswert, &endwert, &dx); funktion(anfangswert, endwert, dx); return 0; }
-
Auch wenn es zu funktionieren scheint. Dieses &* bei den scanf ist überflüssig, da du ja schon einen Zeiger hast.
void eingabe(float *anfangswert, float *endwert, float *dx) { printf("Anfangswert = "); scanf("%f", anfangswert); printf("Endwert = "); scanf("%f", endwert); printf("dx = "); scanf("%f", dx); }