HIlfe bei Speichern von Datien
-
Guten Tag,
Ich hab folgendes Prog. gesschrieben...
[cpp]
void datei_speichern(void){
FILE *datei; //Datei_Pointer auf eine Datei
char pfad[100];
char text[100]; //pfad ist wird vom Typ char Deklariert
int i, n = 25;
printf("Datei anlegen\n>");
gets(pfad); //Gibt die Zeichen von Pfad zurückdatei = fopen(pfad, "w"); //Schreibt in die Datei mit dem Modus w
printf("Schreiben in Datei...\n\n\n");
gets(text);if(datei != NULL){ //Wenn die Datei ungleich NULL ist
strlen(text); //Datei größte wird ermittelt
fwrite(text, sizeof(text), 1, datei); //Der Inhalt von Text wird gespeichert
printf("Das Speichern war erfolgreich!");
}
else{
printf("Das speichern schlug fehl!");
}fclose(datei);
}
[cpp]Ist das ein kleiner Teil des Programms, nur leider hat dieser folgenden Fehler nämlich er geht immer direkt zu Schreiben in Datei anstatt einfach zu erst
das anzuzeigen: Datei anlegen\n>Warum????
-
SpeicherinC schrieb:
Guten Tag,
Ich hab folgendes Prog. gesschrieben...
void datei_speichern(void){ FILE *datei; //Datei_Pointer auf eine Datei char pfad[100]; char text[100]; //pfad ist wird vom Typ char Deklariert int i, n = 25; printf("Datei anlegen\n>"); gets(pfad); //Gibt die Zeichen von Pfad zurück datei = fopen(pfad, "w"); //Schreibt in die Datei mit dem Modus w printf("Schreiben in Datei...\n\n\n"); gets(text); if(datei != NULL){ //Wenn die Datei ungleich NULL ist strlen(text); //Datei größte wird ermittelt fwrite(text, sizeof(text), 1, datei); //Der Inhalt von Text wird gespeichert printf("Das Speichern war erfolgreich!"); } else{ printf("Das speichern schlug fehl!"); } fclose(datei); }
Ist das ein kleiner Teil des Programms, nur leider hat dieser folgenden Fehler nämlich er geht immer direkt zu Schreiben in Datei anstatt einfach zu erst
das anzuzeigen: Datei anlegen\n>Warum????
1. Bitte CPP tags RICHTIG nutzen, danke
2. Bitte gets in der Form niemals nutzen, kann man einen exploit für schreiben. Bitte nutze in Zukunft fgets.
3. Die Kommentare geben nicht wirklich den jeweiligen Schritt an
-
Der beschriebene Fehler entsteht vermutlich durch ein verbleibendes '\n' in stdin. Wahrscheinlich hattest Du schon vorher etwas mit gets oder so eingelesen.
fgets vermeidet diesen Fehler. Falls es trotzdem nicht geht nutze bitte NICHT fflush(stdin) da das Verhalten von fflush auf input streams nicht definiert ist. Hier muss man leider auf zB. so ein Konstrukt zurückgreifen:
http://www.c-plusplus.net/forum/39349Und dann habe ich mir noch die Mühe gemacht und deinen Code mal umgeschrieben
Ich hoffe dadurch werden dir ein paar Sachen klarint save_file() { FILE *file; char buffer[0x100]; printf("Please enter filename: "); fgets(buffer, sizeof(buffer), stdin); buffer[strlen(buffer) - 1] = 0; // "Kill" '\n' @ the end file = fopen(buffer, "w"); if (!file) { printf("Error: Could not open file!\n"); return 1; } memset(buffer, 0, sizeof(buffer)); // Overwrite buffer with 0 printf("Please enter text:\n"); fgets(buffer, sizeof(buffer), stdin); if (!fwrite(buffer, 1, strlen(buffer), file)) { printf("Could not write into file!\n"); fclose(file); return 2; } else { if (fclose(file) != 0) { printf("Could not save data!\n"); return 3; } else { printf("All data written & saved!\n"); } } return 0; }
Denn zumindest Variablennamen und Kommentare sollte man in Englisch verfassen. (Bitte jetzt keinen flame-thread :D)
Edit: memset vergessen, fclose auf != 0 und nicht auf == 0 prüfen und -1 nicht von nöten da:
Maximum number of characters to be read (including the final null-character).
Naja hoffe mal jetzt stimmt alles^^
-
buffer[strlen(buffer) - 1] = 0; // "Kill" '\n' @ the end
Ups - wenn der nur ENTER drückt gibt das:
buffer[-1] = 0
-
Scheppertreiber schrieb:
buffer[strlen(buffer) - 1] = 0; // "Kill" '\n' @ the end
Ups - wenn der nur ENTER drückt gibt das:
buffer[-1] = 0
Noe, dann gibt strlen(buffer) ja 1 zurück da buffer[0] = '\n'
Hehe, naja gut ich gebs zu erstmal hab ich doof geguckt
-
Ups - stimmt.
Ich verwende das eigentlich immer anders (eine Funktion, die eh
\r\n etc abtrennt). Das sind so Tücken da kann man ewig suchen
-
Danke dadurchwerden mir viele Sachen klar
-
Ok ich schreibe noch mal was bevor er dass jetzt so übernimmt:
Hatte da eben noch Sachen falsch, habs editiert bitte gucke oben noch mal eben was sich verändert hat
-
cooky451 schrieb:
Denn zumindest Variablennamen und Kommentare sollte man in Englisch verfassen. (Bitte jetzt keinen flame-thread :D)
Da du keinen flame-thread haben willst weißt du ja das diese Behauptung Schwachfug ist.
-
Programmierer_aus_D schrieb:
cooky451 schrieb:
Denn zumindest Variablennamen und Kommentare sollte man in Englisch verfassen. (Bitte jetzt keinen flame-thread :D)
Da du keinen flame-thread haben willst weißt du ja das diese Behauptung Schwachfug ist.
Englisch ist kurz und knapp, Kommentare müssen nicht (in Deutsch) in epischer Breite hineingetextet werden.