Einlesen von Strings!!!!!!!!



  • 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


Anmelden zum Antworten