Menü in C mit Funktionen?

3 Antworten

Hallo officialcuser,

ich habe mich mal an deinen Code gesetzt, ich hoffe die Antwort kommt noch rechtzeitig, du hattest einige Fehler und an deinem Stylesheet solltest du auch nochmal arbeiten, entweder

if()
.....

oder

if()
{
.......
}

Aber wie auch immer, deine herangehensweise war schon mal nicht schlecht, dein Hauptproblem war allerdings, das du in deiner Funktion folgendes stehen hattest:

 int menupunkt=1;

Diese Deklaration und Initialisierung sorgte jedes mal dafür, das deine Menü Auswahl auf 1 zurückgesetzt wurde, so konnte niemals ein anderes Menü ausgegeben werden.

Ich habe hier mal ein bisschen dran geschraubt, hoffe dir hilft dieser Code, wenn du noch Fragen hast gerne wieder einen Kommentar schreiben.:

https://pastebin.com/ULTz1YYr

In Zeile ~60 musst du in den ' ' das Zeichen reinschreiben welches deine Auswahl Bestätigung ist, damit die while(1)-Schleife unterbrochen wird, in Zeile ~69 kannst du dann mit der Variable menuItem ein switch case / if-Konstrukt aufbauen welches das entsprechende Programm je nach Auswahl startet.

Mfg

TOminerTV

Woher ich das weiß:Studium / Ausbildung

Hallo officialcuser,

Ich vermute du sollst das Menü in einer Funktion ausgeben:

void menu()

{

printf("MENÜ");

}

Da wo das Menü ausgegeben werden soll:

menu();

Für die Programmabfrage >ohne Funktion< if else oder switch case und dafür ein:

scanf("%c", &var);

switch(var)

{

case ...

}

Ich hoffe ich konnte helfen, wenn nicht schreib gerne ein Kommentar.

Mfg

TOminerTV

Woher ich das weiß:Studium / Ausbildung

officialcuser 
Fragesteller
 22.02.2019, 16:01
#include <stdio.h>
#include <stdlib.h>
int menu(void);
int main()
{
int choice=0;
do{
   printf("Was wollen Sie tun?");
   choice=menu();
   switch(choice){
   case 1:
       break;
   }
}while(choice !=4);
   return EXIT_SUCCESS;
}
int menu(void){
   int menupunkt=1;
   char auswahl=0;

   if(menupunkt==1){
        printf("[X]Staffelrechnung\n[]Roehmische Zahlen berechnen\n[]Berechnung der Fibonacci Zahlen\n[]Ende des Programms\n");
   }
  else if(menupunkt==2){
   printf("[]Staffelrechnung\n[X]Roehmische Zahlen berechnen\n[]Berechnung der Fibonacci Zahlen\n[]Ende des Programms\n");
  }
   else if(menupunkt==3){
      printf("[]Staffelrechnung\n[]Roehmische Zahlen berechnen\n[X]Berechnung der Fibonacci Zahlen\n[]Ende des Programms\n");
   }
   else if(menupunkt==4){
      printf("[]Staffelrechnung\n[]Roehmische Zahlen berechnen\n[]Berechnung der Fibonacci Zahlen\n[X]Ende des Programms\n");
   }
   else{
       printf("ERROR");
      switch(auswahl){
   case 'W':
       menupunkt--;
       if(menupunkt==0)
           menupunkt=4;
           break;
   case 'S':
      menupunkt++;
      if(menupunkt==4){
       menupunkt=1;
      }
       break;
      }

Was ist da falsch geht nicht außer ganz oben beim switch weiß ich eh das da noch was gehört aber sonst sollten mit der W und S Taste zum auswählen gehen, da ich mit Pfeiltasten nicht verstehe.

Bitte um Hilfe

Danke im Voraus

0

case switch

und dann je nach variablen wert der eingabe halt die funktion aufrufen

dafür schreibt man naütlrich jeweils eine funktion für jedes verfahren .


officialcuser 
Fragesteller
 20.02.2019, 15:00

also zum beisbiel void Staffelrechnung(parameter) und in dieser Funktion den switch oder wie

0
RakonDark  20.02.2019, 15:07
@officialcuser

nei eher so

main(...) {

ausgabe menu

schleife bis eingabe E für Ende

  • eingabe abfrage
switch ( eingabe ) {
case "a":
  einefunktion();
  break;
case "b":
  anderefunktion();
  break;
default:
  // ausgabe das es den menupunkt nicht gibt.
  break;
}

    }

    int meinefunktion() {

    brechnung der werte bla bla bla

    }

    int anderefunktion() {

    brechnung der werte bla bla bla

    }

    p.s. syntax hab ich mal weggelassen

    und auch das switch

    1
    officialcuser 
    Fragesteller
     22.02.2019, 16:00
    @RakonDark
    #include <stdio.h>
    #include <stdlib.h>
    int menu(void);
    int main()
    {
    int choice=0;
    do{
       printf("Was wollen Sie tun?");
       choice=menu();
       switch(choice){
       case 1:
           break;
       }
    }while(choice !=4);
       return EXIT_SUCCESS;
    }
    int menu(void){
       int menupunkt=1;
       char auswahl=0;
    
       if(menupunkt==1){
            printf("[X]Staffelrechnung\n[]Roehmische Zahlen berechnen\n[]Berechnung der Fibonacci Zahlen\n[]Ende des Programms\n");
       }
      else if(menupunkt==2){
       printf("[]Staffelrechnung\n[X]Roehmische Zahlen berechnen\n[]Berechnung der Fibonacci Zahlen\n[]Ende des Programms\n");
      }
       else if(menupunkt==3){
          printf("[]Staffelrechnung\n[]Roehmische Zahlen berechnen\n[X]Berechnung der Fibonacci Zahlen\n[]Ende des Programms\n");
       }
       else if(menupunkt==4){
          printf("[]Staffelrechnung\n[]Roehmische Zahlen berechnen\n[]Berechnung der Fibonacci Zahlen\n[X]Ende des Programms\n");
       }
       else{
           printf("ERROR");
          switch(auswahl){
       case 'W':
           menupunkt--;
           if(menupunkt==0)
               menupunkt=4;
               break;
       case 'S':
          menupunkt++;
          if(menupunkt==4){
           menupunkt=1;
          }
           break;
          }
    

    Was ist da falsch geht nicht außer ganz oben beim switch weiß ich eh das da noch was gehört aber sonst sollten mit der W und S Taste zum auswählen gehen, da ich mit Pfeiltasten nicht verstehe.

    Bitte um Hilfe

    Danke im Voraus

    0
    officialcuser 
    Fragesteller
     25.02.2019, 16:52
    @officialcuser

    wie geht der Funktionsaufruf bei diesem Programm?

    
    int menu(void);
    int main()
    {
    int auswahl=0;
    long multiplikand=0,multiplikator=0,anzahl=0,eingabe=0,ergebnis=0,speicher=0;
    long zahl=0;
    long zahl1=1,zahl2=1;
    int ende=0,rueck=0;
       printf("Was wollen Sie tun?\n");
       printf("(1)Staffelrechnung\n");
       printf("(2)Roehmische Zahlen berechnen\n");
       printf("(3)Berechnung der Fibonacci-Zahlen\n");
       printf("(E)Ende des Programms\n");
       printf("Auswahl: ");
       scanf("%d",&auswahl);
    
       return EXIT_SUCCESS;
    }
    int menu(void){
    
    int auswahl=0;
    long multiplikand=0,multiplikator=0,anzahl=0,eingabe=0,ergebnis=0,speicher=0;
    long zahl=0;
    long zahl1=1,zahl2=1;
    int ende=0,rueck=0;
       switch(auswahl){
       case 1:
           printf("\nStaffelrechnung:");
    
           printf("\nMultiplikand: ");
           scanf("%ld",&multiplikand);
           printf("Multiplikator: ");
           scanf("%ld",&multiplikator);
    
           printf("Anzahl: ");
           scanf("%ld",&eingabe);
    
           speicher=multiplikator;
           for(anzahl=1;anzahl<=eingabe;anzahl=anzahl+1){
               ergebnis=multiplikand*multiplikator;
               printf("% ld * %ld",multiplikand,multiplikator);
               printf(" = %ld\n",ergebnis);
               multiplikator=multiplikator+1;
               multiplikand=ergebnis;
           }
    
           multiplikator=speicher;
           for(anzahl=1;anzahl<=eingabe;anzahl=anzahl+1){
               ergebnis=multiplikand/multiplikator;
               printf(" %ld : %ld",multiplikand,multiplikator);
               printf(" = %ld\n",ergebnis);
               multiplikator=multiplikator+1;
               multiplikand=ergebnis;
           }
           break;
       case 2:
           printf("\nRoehmische Zahlen berechnen:");
    
           printf("M...1000,D...500,C...100,L...50,X...10,V...5,I...1\n");
           printf("\nBitte eine Zahl eingeben: ");
           scanf("%ld",&zahl);
           if(zahl>=1000){
               printf("M");
               zahl=zahl-1000;
           }
           if(zahl>=500){
               printf("D");
               zahl=zahl-500;
           }
           if(zahl>=100){
               printf("C");
               zahl=zahl-100;
           }
           if(zahl>=50){
               printf("L");
               zahl=zahl-50;
           }
           if(zahl>=10){
               printf("X");
               zahl=zahl-10;
           }
           if(zahl>=5){
               printf("L");
               zahl=zahl-5;
           }
           if(zahl>=1){
               printf("I");
               zahl=zahl-1;
           }
           break;
       case 3:
           printf("\nBerechnung der Fibonacci-Zahlen:");
    
           zahl1=1;
           zahl2=1;
           printf("Hoechstgrenze: ");
           rueck=scanf("%d",&ende);
    
           if (rueck!=1){
               printf("Fehler bei der Eingabe\n");
       }
           else{
               if(ende<0){
                   printf("Geben Sie eine Zahl ein die größer als 0 ist.");
               }
               else{
                   printf("Fibonacci-Zahlen: %ld   %ld   ",zahl1,zahl2);
    
               while(ergebnis<ende ){
                    ergebnis=zahl1+zahl2;
                    zahl1=zahl2;
                    zahl2=ergebnis;
    
                   if(ergebnis<ende){
                   printf("%ld ",ergebnis);
                   }
               }
           }
           break;
       case 'E':
           printf("Ende");
           break;
       default:
           printf("ERROR");
           break;
       }
       }
    }
    
    0
    officialcuser 
    Fragesteller
     25.02.2019, 16:55
    @RakonDark

    das ist meine aufgabe weiß aber nicht wie der Aufruf geht sonst geht das Programm nicht

    0
    RakonDark  25.02.2019, 16:58
    @officialcuser

    also irgendwie sieht das komplett falsch aus . main() ist ja noch ok , aber warum definierst du alle möglichen variabelen in main und dann in menu und warum hat menu(void) irgendwie musst du dich die auswahl in menü übernehmen.
    soll ich das mal so machen wie ich das machen würde ?

    0
    RakonDark  25.02.2019, 17:21
    @officialcuser

    /******************************************************************************

                               by RakonDark

    *******************************************************************************/

    #include <stdio.h>

    void menu (void);

    void staffelrechnung (void);

    int main (void)

    {

     char auswahl;

     do

       {

         menu ();

         scanf (" %c", &auswahl);

         switch (auswahl)

       {

       case '1':

        staffelrechnung ();

        break;

       case 'E':

        printf ("Ende\n");

        break;

       default:

        printf ("ERROR\n");

        break;

       }

       }

     while (auswahl != 'E');

    }

    void menu (void)

    {

     printf ("Was wollen Sie tun?\n");

     printf ("(1)Staffelrechnung\n");

     printf ("(2)Roehmische Zahlen berechnen\n");

     printf ("(3)Berechnung der Fibonacci-Zahlen\n");

     printf ("(E)Ende des Programms\n");

     printf ("Auswahl: ");

    }

    void staffelrechnung (void)

    {

     long multiplikand = 0, multiplikator = 0, anzahl = 0, eingabe = 0, ergebnis = 0, speicher = 0;

     printf ("\nStaffelrechnung:");

     printf ("\nMultiplikand: ");

     scanf ("%ld", &multiplikand);

     printf ("Multiplikator: ");

     scanf ("%ld", &multiplikator);

     printf ("Anzahl: ");

     scanf ("%ld", &eingabe);

     speicher = multiplikator;

     for (anzahl = 1; anzahl <= eingabe; anzahl = anzahl + 1)

       {

         ergebnis = multiplikand * multiplikator;

         printf ("% ld * %ld", multiplikand, multiplikator);

         printf (" = %ld\n", ergebnis);

         multiplikator = multiplikator + 1;

         multiplikand = ergebnis;

       }

     multiplikator = speicher;

     for (anzahl = 1; anzahl <= eingabe; anzahl = anzahl + 1)

       {

         ergebnis = multiplikand / multiplikator;

         printf (" %ld : %ld", multiplikand, multiplikator);

         printf (" = %ld\n", ergebnis);

         multiplikator = multiplikator + 1;

         multiplikand = ergebnis;

       }

    }

    0
    RakonDark  25.02.2019, 17:22
    @RakonDark

    und jetzt kannst du für jede menu auswahl eine eigene funktion machen .

    0