Text in eine Datei schreiben!



  • Hallo!

    Ich muss fuer die Schule eine Art Editor programmieren.
    Er muss nur Ausgeben von einer Datei und schreiben in eine Datei koennen.
    Das Ausgeben funktioniert bereits, nur beim Eingeben habe ich noch einige Probleme.

    Hier der Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define PAGE_SIZE 4096
    
    int schreiben() 
    {
    
        FILE *file;
        int c;
    
        printf("Es wird in Datei C:\\Edit.txt geschreiben!\n");
        printf("Oeffne Datei...\n");
    
        file = fopen("C:\\Edit.txt", "wb");
    
        printf("Sie koennen nun schreiben!\n");
    
        puts("---------------------START-------------------------\n");
        c=getchar();
        if (c != 0x05 && c != EOF) 
        {
           putc(c,file);
           c = getchar();
           }
        puts("\n---------------------END---------------------------");
        fclose(file);
    
    }
    
    void ausgabe() {
    
         FILE *file;
         char buf[PAGE_SIZE];
         int bytes;
    
         printf("Es wird aus Datei C:\\Edit.txt gelesen!\n");
         printf("Oeffne Datei...\n");
    
         file = fopen("C:\\Edit.txt", "rb");
         puts("---------------------START--------------------------\n");
         while ((bytes = fread(buf, 1, PAGE_SIZE, file)) > 0)
    		fwrite(buf, 1, bytes, stdout);
    
         puts("\n---------------------END-------------------------------");
         fclose(file);
    
    }
    
    int main(int argc, char *argv[])
    {
    
      char cWahl;
    
      printf("(n)eue Datei\n(a)usgabe von Datei\n\nIhre Wahl: ");
      cWahl=getchar();
    
      switch(cWahl) {
      case 'n': schreiben(); break;
      case 'a': ausgabe(); break;
      default: printf("Falsche Auswahl...\n BREAK!\n");
    }
    
      printf("\n\nBeende Programm.\n(c) 2006 Daniel Pischl, Christoph Rabensteiner\n\n");
      printf("Druecken Sie eine beliebige Taste!");
    
      getch();
    
      return 0;
    }
    

    Nun ist mein Anliegen folgendes:
    Ich will, dass man den "Eingabemodus" mit CTRL+D (0x05) oder EOF beenden kann. Allerdings wird, sobald ich Return druecke der Ausgabemodus abgebrochen und ich kann nichts mehr schreiben. Auch ist der Inhalt der Datei C:\Edit.txt danach leer.
    Habt ihr irgendwelche Tips wie ich das besser machen koennte?



  • Ich hätte das Programm ganz anders geschrieben:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    FILE *f; 
    char c; 
    char Text[600];
    
    printf("(n)eue Datei\n(a)usgabe von Datei\n\nIhre Wahl: "); 
    scanf("%c",&c);
    fflush(stdin); 
      switch(c) { 
                case 'n': f=fopen("C:\\Edit.txt","w+");
    
                printf("Es wird in Datei C:\\Edit.txt geschreiben!\n"); 
                printf("Oeffne Datei...\n");
                printf("Bitte geben Sie den Text ein: ");
                fgets(Text,600,stdin); 
                fflush(stdin);
                fprintf(f,"%s",Text);  
                break; 
                case 'a': f=fopen("C:\\Edit.txt","r");
    
                printf("Es wird aus Datei C:\\Edit.txt gelesen!\n"); 
                printf("Oeffne Datei...\n"); 
                while(fgets(Text,sizeof(Text), f) !=0)
                printf("Der Text, der in der Datei steht: ");
                fputs(Text,stdout);
                break; 
                default: printf("Falsche Auswahl...\n BREAK!\n"); 
    } 
    fclose(f);
    
     printf("\n\nBeende Programm.\n(c) 2006 Daniel Pischl, Christoph Rabensteiner\n\n");     
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Felix

    _______________________

    www.c-programmieren.com



  • Mit dem Enterproblem fällt mir aber auf die Schnelle auch nichts ein!



  • Hallo!

    Erstmal danke fuer die Antwort. Deine Moeglichkeit finde ich plausibel, allerdings will ich das 600 Zeichen Array vermeiden.

    Hast Du keine andere Idee?



  • Uebrigens funktioniert Deine Mglk. garnicht!
    Sobald ich bei der Auswahl n druecke, ist das Programm fertig.



  • Ich habe eine Lösung gefunden 😃

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    FILE *f; 
    char c; 
    char Text[600];
    char Buchstabe;
    int e=0;
    int d;
    
    printf("(n)eue Datei\n(a)usgabe von Datei\n\nIhre Wahl: "); 
    scanf("%c",&c);
    fflush(stdin); 
      switch(c) { 
                case 'n': f=fopen("C:\\Edit.txt","w+");
    
                printf("Es wird in Datei C:\\Edit.txt geschreiben!\n"); 
                printf("Oeffne Datei...\n");
                printf("Bitte geben Sie den Text ein: ");
                while(d!=27)//Die Texteingabe wird mit Esc beendet
                {
                Buchstabe=d=getch();
    
                if(d==13)
                {
                Text[e]='\n';
                printf("\n");
                }
                if(d==27)
                {
                         break;
                }
                else
                {
                Text[e]=Buchstabe;
                printf("%c",Buchstabe);
                }
                e++;
                } 
                fflush(stdin);
                fprintf(f,"%s",Text);  
                break; 
                case 'a': f=fopen("C:\\Edit.txt","r");
    
                printf("Es wird aus Datei C:\\Edit.txt gelesen!\n"); 
                printf("Oeffne Datei...\n"); 
                while(fgets(Text,sizeof(Text), f) !=0)
                printf("Der Text der in der Datei steht: ");
                fputs(Text,stdout);
                break; 
                default: printf("Falsche Auswahl...\n BREAK!\n"); 
    } 
    fclose(f);
     printf("\n\nBeende Programm.\n(c) 2006 Daniel Pischl, Christoph Rabensteiner\n\n");     
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Du musst zwar noch ein bisschen Schreibarbeit machen, damit man z.B. löschen oder zurückgehen kann, aber das überlasse ich dir.

    Übrigens, was ist Mglk. und bei mir funktioniert alles perfekt, wenn ich n eingebe.

    Ich hoffe ich habe dir geholfen,

    Felix

    ___________________________

    www.c-programmieren.com


Anmelden zum Antworten