Einlesen von Strings!!!!!!!!
-
Danke!!!! dh. mit scanf ist es nicht möglich!
Dann hätte ich noch eine Frage. Dieses Programm speichert die
Daten einer Struktur ab. Und zwar die Untervariable Name wird
richtig abgespeichert aber bei der Untervariable Alter wird
irgendwas gespeichert bzw. irgendwelche Zeichen!!! Was ist da falsch?#include<stdio.h> #include<stdlib.h> struct Person { char Namen[30]; int Alter; }Telefon; void main(void) { char Pruef; char Dateinamen[30]; FILE *p_file; printf("Geben Sie bitte den Dateinamen ein: \n"); scanf("%s",Dateinamen); p_file = fopen(Dateinamen,"w"); if(!p_file) { printf("Kein Laden der Datei möglich!\n"); return; } do { printf("\n Namen: "); scanf("%s", Telefon.Namen ); printf("\n Alter: "); scanf("%d", &Telefon.Alter ); fwrite(&Telefon ,sizeof(Telefon),1,p_file); printf("Wollen Sie noch Dateien Speichern? [j]/[n]\n"); scanf("%s",&Pruef); }while((Pruef=='j') || (Pruef=='J')); fclose(p_file); }
Danke!!!!!!!!!
-
Anzi-C schrieb:
P.S.: Zumindest ich habe es so gelernt, dass man vor Strings "sz" schreibt und bei einzelnen Zeichen "c".
schon wieder einer, der diese polnische notation verwendet
-
fopen "w" heißt "wt", neue Datei im Textmodus erstellen. Ich würde "wb" nehmen -> Binärmodus
Vielleicht liegt es auch am sizeof(Telefon) -> sizeof(struct Telefon)
-
schon wieder einer, der diese polnische notation verwendet
Ich verwende sie nicht, da ich einfach zu faul bin. Allerdings haben wir sie gelernt und unser Prof verwendet sie mit Leidenschaft...
sizeof(struct Telefon)
sizeof(struct Person) müsste es heißen
-
@net: ja, würg *fg*. BTW warst es nicht du, der mich (damals noch als unreg) davon abgebracht hat
Greetz, Swordfish
-
Anzi-C schrieb:
"sz"
Wer Ordnung hält, ist nur zu faul zum szuchen.
-
Hab beides ausprobiert! Wenn ich statt w wb eintippe ändert sich gar nichts und
wenn ich sizeof(struct Telefon) eingebe kommt eine Fehlermeldung!Leider!!!
-
Und dann würde ja nicht der Namen richtig gespeichert werden, oder?
-
Swordfish schrieb:
@net: ja, würg *fg*. BTW warst es nicht du, der mich (damals noch als unreg) davon abgebracht hat
ich glaub' nicht. ich lästere ja nur über sowas ohne begründungen zu liefern...
-
*gg* Naja während ihr über die ungarische Notation (die polnische ist etwas anderes
) schimpft habe ich mal sein Programm korrigiert.
#include <stdio.h> #include <stdlib.h> #include <string.h> struct Person { char Namen[30]; int Alter; } Telefon; int main(void) { char Pruef; char Dateinamen[30] = ""; int c; FILE *p_file = NULL; printf("Geben Sie bitte den Dateinamen ein: \n "); fgets(Dateinamen, 30, stdin); if(Dateinamen[strlen(Dateinamen)-1] == '\n') // fgets() hinterlässt ein LF ('\n') das gelöscht werden muss Dateinamen[strlen(Dateinamen)-1] = '\0'; p_file = fopen(Dateinamen, "wb"); if(p_file == NULL) { printf("Kein Laden der Datei möglich!\n"); exit(1); } do { printf("\n Namen: "); fgets(Telefon.Namen, 30, stdin); printf("\n Alter: "); scanf("%d", &Telefon.Alter); while((c=getchar()) != EOF && c != '\n'); // Komm ja nicht auf die Idee ffluh(stdin); zu verwenden ;-) fwrite(&Telefon, sizeof(struct Person), 1, p_file); printf("Wollen Sie noch Dateien Speichern? [j]/[n]\n"); scanf("%c",&Pruef); while((c=getchar()) != EOF && c != '\n'); } while((Pruef=='j') || (Pruef=='J')); fclose(p_file); return 0; }
So sollte es funktionieren.
-
Hab es gleich "reinkopiert" aber leider wir die Zahl wieder falsch
abgespeichert!Aber trotzdem vielen Dank!!!!
-
Was verstehst du unter falsch abgespeichert? Ich habes eigentlich extra getestet und es sollte funktionieren. Ich vermute, du öffnest die Datei im Text-Editor?
-
Ja genau ich öffne sie im Text-Editor!
Was ist daran falsch?
-
die daten werden binär gespeichert.
mitm normalen editor ist angucken also nicht. musst die datei auch wieder im
binär mode öffnen/angucken dann ist auch das ergebnis richtg...
-
Du schreibst die Datei binär, dir jetzt genau zu erklären wie z.B. floats oder ints gespeichert werden, sprengt den Rahmen. Google mal danach oder schau dir den Wikipedia-Artikel an: http://de.wikipedia.org/wiki/Binärdatei
Wenn du deine Daten nachher noch mit dem Text-Editor lesen willst, musst du sie folgendermaßen schreiben:
p_file = fopen(Dateinamen, "w"); if(Telefon.Namen[strlen(Telefon.Namen)-1] == '\n') // fgets() hinterlässt ein LF ('\n') das gelöscht werden muss Telefon.Namen[strlen(Telefon.Namen)-1] = '\0'; [..] // statt fwrite(): fprintf(p_file, "%s %d\n", Telefon.Namen, Telefon.Alter);
-
Ok, vielen Dank nochmals!!!!!!!!!
Danke!
lg
Mini
-
@net: stimmt, war groovemaster. Aber du hast auch deinen Senf dazugegeben.
Greetz, Swordfish