Menü in C mit Funktionen?
Schreiben Sie ein Programm, in welchem Sie dem Benutzer ein Menü zur Auswahl anbieten. Der Benutzer darf dann zwischen verschiedenen Programmen, die Sie bereits in vergangenen Übungen gelöst haben auswählen.
Dabei sollen mindestens 3 verschiedene Programme zur Auswahl stehen
Beispiel:
Was wollen Sie tun?
(1) Staffelrechnung
(2) Römische Zahlen berechnen
(3) Berechnung der Fibonacci-Zahlen
(E) Ende des Programmes
Auswahl:
Hinweis: Verwenden Sie dazu Funktionen!
das ist die Aufgabenstellung wie soll ich das mit den Funktionen machen
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.:
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
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
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 .
also zum beisbiel void Staffelrechnung(parameter) und in dieser Funktion den switch oder wie
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
#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
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;
}
}
}
das ist meine aufgabe weiß aber nicht wie der Aufruf geht sonst geht das Programm nicht
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 ?
/******************************************************************************
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;
}
}
und jetzt kannst du für jede menu auswahl eine eigene funktion machen .
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