EINGABE2
-
Ich habe mich in meinen ersten Beitrag ein bisschen falsch ausgedrückt.
Wenn man Daten in das Programm eingibt, dann werden diese nicht c:\test.txt gespeichert. Und wenn ich einen Text nach betätigen der '#'Taste eingebe dann wird nur dieser abgespeichert.
Ich würde mich über ein ausführliche Hilfe freuen.
MFG MASTER#include<stdio.h>
#include<conio.h>int main(void){
FILE *datei;
char text[1000];
char name[100];
int ab;do{
ab=fgetc(stdin);
gets(text);
fflush(stdin);
}while(ab != '#');
printf("\nSpeichern unter...:>");
gets(name);datei = fopen(name, "w+");
fprintf(datei, text);
if(datei == NULL){
printf("\nFehler: Datei konnte nicht gespeichert werden.");
}fclose(datei);
getchar();
return 0;
}
-
Der String, der den Dateinamen enthält, würde "c:\test.txt" lauten, den musst du noch in "c:\\test.txt" umwandeln, da \ eine Formatzeichenangabe ist und bei dir mittels \t ein Tabulator einschieben würde...
-
Original erstellt von RTC:
Der String, der den Dateinamen enthält, würde "c:\test.txt" lauten, den musst du noch in "c:\\test.txt" umwandeln, da \ eine Formatzeichenangabe ist und bei dir mittels \t ein Tabulator einschieben würde...Nee, der string wird ja von der Tastatur eingelesen und steht nicht im Quellcode.
-
Das Programm erstellt auch die Textdatei test.txt nur da wird nichts abgespeichert.
-
Oops, sorry...
-
Original erstellt von <MASTER>:
**
do{
ab=fgetc(stdin);
gets(text);
fflush(stdin);
}while(ab != '#');
printf("\nSpeichern unter...:>");
gets(name);datei = fopen(name, "w+");
fprintf(datei, text);
if(datei == NULL){
printf("\nFehler: Datei konnte nicht gespeichert werden.");
}**ersetze mal dein fprintf mit diesem
fprintf(datei,"%s",text);Und das dein Text erst gespeichert wird wenn du vorher ein '#' eingibst liegt
daran, das bei jedem neuen Schleifendurchlauf (also nach jedem Enter ?) der Inhalt von text überschrieben wird.
Aus jedem Enter (\n) wird außerdem ein \0 für das Ende des String.[ Dieser Beitrag wurde am 05.07.2003 um 00:27 Uhr von tiaz editiert. ]
-
Original erstellt von <tiaz>:
Und das dein Text erst gespeichert wird wenn du vorher ein '#' eingibst liegt
daran, das bei jedem neuen Schleifendurchlauf (also nach jedem Enter ?) der Inhalt von text überschrieben wird.
Aus jedem Enter (\n) wird außerdem ein \0 für das Ende des String.Wie kann ich dies ändern. Ich will das er den ganzen Text vor eingabe der '#'Taste speichert.
-
Also auch wenns keiner gerne hört, aber ich bin (nach mehrmaligen Versuchen) einfach dahinter gekommen, dass bei solchen Dingen einfach ein Programmablaufplan bzw. ein Struktogramm sehr hilfreich sein können.
Man hat zu jeder Zeit (zumindest wenn mans richtig macht
) eine Übersicht der Variablen, den Stand des Programms und kann Fehler und ungewollte Ereignisse praktisch erkennen, bevor sie auftreten.
Als Einstieg helfen diese Sachen, auch wenn sie unbeliebt sind, ungemein. Wenn das steht, braucht man "einfach" das nur noch in die entsprechende Sprache umsetzen.
Ich kann nur für mich sprechen, aber eben genau solche Probleme kann man damit direkt vermeiden bzw. leichter finden.
-
Original erstellt von <MASTER>:
**
Wie kann ich dies ändern. Ich will das er den ganzen Text vor eingabe der '#'Taste speichert.**Was Carsten sagt, kannst du ja mal ausprobieren. Im Endeffekt liegt es ja an
deiner Schleife, also im Ablaufplan.
Nur ist dein Programm eigentlich klein genug, das es auch ganz gut ohne
Ablaufplan auskommst. Hauptsache du kommst hinter den Fehler (im Ablauf) deiner
Schleife.Übrigens ist gets Pufferüberlauf-gefährdet, solltest also wenn nötig fgets()
nutzen.---
Wenn du den Fehler nicht finden kannst, darfst du weiterlesenIm Endeffekt hast du mehrere Möglichkeiten.
Am schnellsten ist es, das du erst nachdem gets() fertig ist (also nach <Enter> ?!?)
du fgetc() arbeiten lässt. Allerdings glaube ich, das das auch nicht das ist
was du wolltest (falls gets wirklich nach jedem Enter fertig ist).Also müsstest du bei jedem Zeichen kucken ob's ein Raute('#') ist und die
gets-Funktion durch getc() ersetzen und dann kannst du noch mit putc() in die
Datei schreiben..., aber probier erstmal.