Problem beim Schreiben eines "VERWALTUNGSPROGRAMMS"



  • moin,

    ich habe mich an einem C "Verwaltungsprogramm" probiert, aber leider ist das doofe, dass anscheinend die Switch schleife alles kaputt macht, habe es aber auch schonmal mit if probiert war genauso scheiße. Und zwar ist das Problem das es Die Menü Punkte überspringt also man nicht 1 oder 2 eingeben kann und das nächste ist das wenn es dann zu pfad eingeben springt, wenn man dann was eingibt das Programm aufeinmal nicht mehr funktioniert!



  • Das tut mir leid.



  • Der war gut. 🙂



  • Wenn du nur deinen Frust über C loswerden wolltest, kannst du zu dem C++ Typen wechseln, die nehmen jeden den sie kriegen...



  • Tragisch. Nimm Java. Oder Gift.



  • oder geh in laden und kauf dir ein Verwaltungsprogramm...



  • Was ist eine switch Schleife? 😕



  • So sry hab vergessen das Programm zu zeigen sry war irgendwie mit den gedanken beim programm deshalb der halbfertige post

    Hier das Programm

    #include<stdio.h>                                               //include dateien einbinden
    #include<stdlib.h>                                              //include dateien einbinden
    
    main(){
           FILE *datei;                                             //ein Pointer der auf eine Datei zeigt
           int wahl;
           char text[10000];                                       //char wird deklariert
           char pfad[100];                                         // char wird deklariert
    
           printf("\n\t\tV e r w a l t u n g s p r o g r a m m\n");
           printf("1. Datei lesen");
           printf("2. Datei  speichern");
           printf("Der Rest kommt noch");
           printf(">\n");
           printf("Bitte geben sie einen pfad an>\n");
           gets(pfad);                                             //werd von char speichern
    
           switch(wahl){                                            //Hier beginnt die switch-schleife
    
                   case 1: datei = fopen(pfad, "r");               //datei wird geöffnet und im Modus lesen ausgeführt
                           fread(text, sizeof(text), 1, datei);    //hier wird aus der geöffneten datei gelesen und die Strings in text gespeichert
                           printf("%s", text);                     //hier wird text angezeigt
    
                   case 2: datei = fopen(pfad, "w");                 //Datei wird im Modus write geöffnet
                           printf("Was wollen sie in die Datei schreiben?");
                           gets(text);                              //Der eingegebene Text wird in einem char namens Text gespeichert
                           fwrite(text, strlen(text), 1, datei);    //der char TExt wird in der geöffneten daeti gespeichert
    
                 default : printf("Es wurde keine der im Menü vorhandenen Zahlen benutzt!");
    
            fclose(datei);                                //die zuvor geöffnete datei wird geschlossen
    
            system("PAUSE");                              //das programm wartet auf eine eingabe wenn es durchlaufen ist um es zu beenden
            return 0;                                     //gibt den wert null zurück
            }
    

    Kann mir da jemand bitte helfen???



  • break; bei den case vergessen.

    ⚠ Wenn du 3 eingibst versucht das Programm die nicht geöffnete Datei zu schließen.



  • DirkB schrieb:

    break; bei den case vergessen.

    ⚠ Wenn du 3 eingibst versucht das Programm die nicht geöffnete Datei zu schließen.

    Jepp - ein Klassiker - keine Panik 🕶


  • Mod

    Tipp: Deine Kommentare sind ein Musterbeispiel wie man es nicht macht: Unglaublich viel geschrieben, gar nichts ausgesagt. Fast wie Politik.



  • Es funktioniert leider immer noch nicht mehr spätestens wenn ich eine Zahl eingebe z.B eins steht da: das programm funktioniert nicht mehr es wird nach einer Lösung gesucht!Obwohl ich alles richtig habe. Oder brauch default auch break?

    hmmm...

    Hier aufjedenfall der Code

    #include<stdio.h>                                               //include dateien einbinden 
    #include<stdlib.h>                                              //include dateien einbinden 
    
    main(){ 
           FILE *datei;                                             //ein Pointer der auf eine Datei zeigt 
           int wahl; 
           char text[10000];                                       //char wird deklariert 
           char pfad[100];                                         // char wird deklariert 
    
           printf("\n\t\tV e r w a l t u n g s p r o g r a m m\n"); 
           printf("1. Datei lesen\n"); 
           printf("2. Datei  speichern\n"); 
           printf("Der Rest kommt noch\n"); 
           printf(">\n"); 
           printf("Bitte geben sie einen pfad an>\n"); 
           gets(pfad);                                             //werd von char speichern 
    
           switch(wahl){                                            //Hier beginnt die switch-schleife 
    
                   case 1: datei = fopen(pfad, "r");               //datei wird geöffnet und im Modus lesen ausgeführt 
                           fread(text, sizeof(text), 1, datei);    //hier wird aus der geöffneten datei gelesen und die Strings in text gespeichert 
                           printf("%s", text);                     //hier wird text angezeigt 
                           break;
    
                   case 2: datei = fopen(pfad, "w");                 //Datei wird im Modus write geöffnet 
                           printf("Was wollen sie in die Datei schreiben?"); 
                           gets(text);                          //Der eingegebene Text wird in einem char namens Text gespeichert 
                           fwrite(text, sizeof(text), 1, datei);    //der char TExt wird in der geöffneten daeti gespeichert 
                           break;
                 default : printf("Es wurde keine der im Menü vorhandenen Zahlen benutzt!"); 
                 }
    
            fclose(datei);                                //die zuvor geöffnete datei wird geschlossen 
    
            system("PAUSE");                              //das programm wartet auf eine eingabe wenn es durchlaufen ist um es zu beenden 
            return 0;                                     //gibt den wert null zurück 
            }
    


  • WO wird der wert (die 1) denn eingelesen?

    Oder brauch default auch break?

    Das break; bricht aus dem switch aus. Da das aber nachdem default sowieso zu Ende ist braucht es hier (default am Ende) nicht stehen).
    Hübscher und einleuchtender ist es aber wenn es da steht. Überlass das optiomieren dem Compiler.

    fclose(datei);
    

    Wenn die Variable datei nicht initialisiert ist wird dein Programm hier Ärger machen. Passiert bei dir wenn du was anderes als 1 oder 2 eingibst.



  • C_Verwalter schrieb:

    Obwohl ich alles richtig habe.

    Du hast nicht alles richtig sondern vieles falsch.

    #include<stdio.h>                                               
    #include<stdlib.h>                                              
    
    main(){                                                         /*implizit int nicht standardkonform*/
           FILE *datei;                                             
           int wahl; 
           char text[10000];                                       
           char pfad[100];                                         
    
           printf("\n\t\tV e r w a l t u n g s p r o g r a m m\n"); 
           printf("1. Datei lesen\n"); 
           printf("2. Datei  speichern\n"); 
           printf("Der Rest kommt noch\n"); 
           printf(">\n"); 
           printf("Bitte geben sie einen pfad an>\n"); 
           gets(pfad);                                             /*unsicher und somit potentiell undefiniert*/
    
           switch(wahl){                                           /*undefiniert*/
    
                   case 1: datei = fopen(pfad, "r");               
                           fread(text, sizeof(text), 1, datei);    /*undefiniert falls datei==NULL*/ 
                           printf("%s", text);                     /*undefiniert falls fread fehlschlug*/
                           break;
    
                   case 2: datei = fopen(pfad, "w");                 
                           printf("Was wollen sie in die Datei schreiben?"); 
                           gets(text);                          /*unsicher und somit potentiell undefiniert*/
                           fwrite(text, sizeof(text), 1, datei);    /*undefiniert falls gets fehlschlug;hier wird immer versucht, 10000 Zeichen zu schreiben, wohl kaum beabsichtigt*/
                           break;
                 default : printf("Es wurde keine der im Menü vorhandenen Zahlen benutzt!"); 
                 }
    
            fclose(datei);                                /*undefiniert falls datei==NULL*/
    
            system("PAUSE");                              /*Schrott und unportabel*/
            return 0;                                     
            }
    

    Einiges weiteres könnte ich noch vergessen haben zu erwähnen.



  • Einiges weiteres könnte ich noch vergessen haben zu erwähnen.

    zB "wahl" auch einen Wert geben ... im Moment fehlt der Wert, es wird
    vermutlich nur der default-Zweig ausgeführt.

    ...
    gets(pfad);
    ...
    switch(wahl){      
    ...
    


  • So ich habs wieder verbessert und es funktioniert immer noch nicht bzw. es funktioniert nach der eingabe der ersten zahl nicht mehr. hier der code hab allles versucht, aber nichts klappt 😞

    #include<stdio.h>                                               //include dateien einbinden 
    #include<stdlib.h>                                              //include dateien einbinden 
    
    int main(){ 
           FILE *datei;
           FILE *kopie;                                             //ein Pointer der auf eine Datei zeigt 
           int wahl; 
           char text[10000];                                       //char wird deklariert 
           char pfad[100];
           char pfad2[100];                                         // char wird deklariert 
    
           printf("\n\t\tV e r w a l t u n g s p r o g r a m m\n"); 
           printf("1. Datei lesen\n"); 
           printf("2. Datei  speichern\n"); 
           printf("3.Datei kopieren\n");
           printf("Bitte Zahl eingeben!");
           scanf("%i", &wahl);  
    
           switch(wahl){                                            //Hier beginnt die switch-schleife 
    
                   case 1: printf("Bitte geben sie einen pfad an>\n"); 
                           fgets(pfad, 100, datei);
                           datei = fopen(pfad, "r");               //datei wird geöffnet und im Modus lesen ausgeführt 
                           fread(text, sizeof(text), 1, datei);    //hier wird aus der geöffneten datei gelesen und die Strings in text gespeichert 
                           printf("%s", text);                     //hier wird text angezeigt 
                           break;
    
                   case 2: printf("Bitte geben sie einen pfad an>\n"); 
                           fgets(pfad, 100, datei);
                           datei = fopen(pfad, "w");                 //Datei wird im Modus write geöffnet 
                           printf("Was wollen sie in die Datei schreiben?"); 
                           fgets(text, 1000, datei);                          //Der eingegebene Text wird in einem char namens Text gespeichert 
                           fwrite(text, sizeof(text), 1, datei);    //der char TExt wird in der geöffneten daeti gespeichert 
                           break;
    
                   case 3:
    
                   default : printf("Es wurde keine der im Menü vorhandenen Zahlen benutzt!");
                 }
    
            fclose(datei);                                //die zuvor geöffnete datei wird geschlossen 
    
            system("PAUSE");                              //das programm wartet auf eine eingabe wenn es durchlaufen ist um es zu beenden 
            return 0;                                     //gibt den wert null zurück 
            }
    


  • Achja und der dritte case der kommt noch hinzu also nicht wundern 😃



  • Dann doch bitte gleich

    case 3: break;
    

    Wie heißt denn die Datei die du öffnen willst?

    case 1: printf("Bitte geben sie einen pfad an>\n");
                           fgets(pfad, 100, datei);
                           printf("Öffne Datei: <%s>\n", pfad);  // Kontrolle des Namens
                           datei = fopen(pfad, "r");               //datei wird geöffnet und im Modus lesen ausgeführt
                           if (datei != NULL) {          // im Erfolgsfall
                             fread(text, sizeof(text), 1, datei);    //hier wird aus der geöffneten datei gelesen und die Strings in text gespeichert
                             printf("%s", text);                     //hier wird text angezeigt}
                             fclose(datei);    // HIER die zuvor geöffnete datei schliessen
    
                           } else {  // FEHLER
                             printf("Fehler: Kann Datei <%s> nicht öffnen\n", pfad);
                           }
    
                           break;
    


  • Ach mit dem break nach dem dritten case habe ich noch das gleiche problem



  • Ach mit dem break nach dem dritten case habe ich noch das gleiche problem

    Das ist schon klar. Aber da du vor 4 Stunden danach gefragt hast nochmal der Hinweis.

    Mit "es funktioniert nicht" kann hier keiner etwas anfangen. Darum
    - Was passiert, wird ausgegeben, eingegeben?
    - Was erwartest du?
    - Wie lautet die Fehlermeldung?

    Dann kann man den Fehler auch sehr gut einkreisen.

    Hast du meinen Code von 14:35 mal angeschaut. Da sind ein paar printf zu Kontrolle drin. Welche davon werden ausgegeben?


Log in to reply