2016-04-18 2 views
1

Anstatt das Programm direkt nach der ersten Funktion, die "1" ist, zu beenden, wie treffe ich eine Auswahl, um mit einer anderen Funktion fortzufahren? Etwas wie das Menü wieder erscheinen zu lassen, um die Auswahl für andere Funktionen zu treffen. Beispiel: 2 oder 3Wie treffe ich eine Auswahl, um zu einer anderen Funktion zu wechseln, wenn ich die aktuelle Funktion abgeschlossen habe?

#include <stdio.h> 

int testing(); int rewarding(); int buying(); 

void main() 
{ 
    int menu; 

    printf("Enter 1 for testing:\n"); 
    printf("Enter 2 for rewarding:\n"); 
    printf("Enter 3 for buying:\n"); 
    scanf("%d", &menu); 

    if (menu == 1) {  //first function 
     testing(); 
    } 

    else if (menu == 2) { //second function 
     rewarding(); 
    } 

    else if (menu == 3) { //third function 
     buying(); 
    } 

    system("pause"); 
} 

testing() { 
    printf("this is the first function\n"); // proceed to selection menu to choose another function when first function is completed 
    return(0); 
} 

rewarding() { 
    printf("this is the second function\n"); 
    return (0); 
} 

buying() { 
    printf("this is the third function\n"); 
    return(0); 
} 
+2

Loop in 'Haupt'. – LogicStuff

+0

@LogicStuff Tut mir leid, ich bin ein Neuling. Könnten Sie genauer sein? Oder zeigen Sie die Funktionsweise? Danke –

+0

Bitte lesen Sie, wie Sie Schleifen in C oder C++ verwenden. Es gibt unzählige Beispiele, da es eines der grundlegenden Werkzeuge von Verfahrenssprachen ist. – paddy

Antwort

0

Wickeln Sie Ihr Menü und Funktionsaufruf Sachen in einer while (true) {...} Schleife und macht einen 4. Menü-Eintrag für 'beenden' und den Code else if (Menü == 4) {Pause; }

Beispiel:

#include <iostream> 

int main(int argc, char **argv) 
{ 
    while(true) 
    { 
     int menu; 
     std::cout << "Press (1) FuncA, (2) Func B, (3) Func C or (4) Quit" << std::endl; 
     std::cin >> menu; 
     if (menu == 1) 
      testing(); 
     else if (menu == 2) 
      rewarding(); 
     else if (menu == 3) 
      buying(); 
     else if (menu == 4) 
      break; 
     else 
      std::cout << "Please press 1, 2, 3 or 4" << std::endl; 
    } 
    return 0; 
} 

Die "break" Anweisung sofort die while() Schleife und die Anwendung beendet wird annulliert. Alle anderen Optionen führen die entsprechende Funktion aus und kehren zum Menü zurück.

Klammern um den Aufruf von test(), lohnend() oder kaufend() werden zum Gruppieren von Ausdrücken verwendet und sind nicht erforderlich, wenn Sie nur einen Ausdruck benötigen. Ich entfernte sie von meinem IFS, aber das ist nur eine Frage des Geschmacks.

Sie sollten auch einen Rückgabetyp für Ihre Funktionen angeben. Verwenden Sie Leere Prüfung() {} wenn Sie einen Wert nicht zurückgeben müssen (auch von den Funktionen der return-Anweisungen entfernen müss)

+0

Sie haben Recht. Das habe ich behoben. Das passiert, wenn Sie Code in Notepad.exe schreiben und nicht einmal versuchen, es zu kompilieren;) –

0
  1. Verwenden Sie eine while Schleife um den Code, der Benutzereingabe wird und macht etwas damit.
  2. Bietet eine Option zum Beenden der Schleife.


// Loop forever until the user chooses the option to exit the loop. 
while (true) 
{ 
    printf("Enter 1 for testing:\n"); 
    printf("Enter 2 for rewarding:\n"); 
    printf("Enter 3 for buying:\n"); 
    printf("Enter 4 to exit:\n"); 

    if (scanf("%d", &menu) != 1) 
    { 
     // Error in input. 
     // Read and discard the rest of the line. 
     printf("Invalid input. Discarding the input.\n"); 
     int c; 
     while ((c = getc(stdin)) != EOF && c != '\n'); 

     // Go on to the start of the loop. 
     continue; 
    } 

    if (menu == 1) {  //first function 
     testing(); 
    } 

    else if (menu == 2) { //second function 
     rewarding(); 
    } 

    else if (menu == 3) { //third function 
     buying(); 
    } 
    else if (menu == 4) { //fourth option 
     break; 
    } 
    else 
    { 
     printf("Invalid option: %d\n", menu); 
    } 
} 

Zusätzlich zu den oben ...

Ändern der Rückgabetyp von main von void zu int. Das ist die standardkonforme Definition von main.

int main() { ... } 
0

Verwenden Sie eine While-Schleife. Und switch ist klarer als if-else.

über den Rückgabewert von scanf Seien Sie vorsichtig, es könnte 0, 1 oder EOF sein. Wir wollen nur fortfahren, wenn es 1 ist.

#include <stdio.h> 

void print_menu() { 
    printf("Enter 1 for testing:\n"); 
    printf("Enter 2 for rewarding:\n"); 
    printf("Enter 3 for buying:\n"); 
} 

void testing() {} 
void rewarding() {} 
void buying() {}  

int main() { 
    while (1) { 

     print_menu(); 

     int menu; 
     int ret = scanf("%d", &menu); 

     if (ret == EOF) break; 
     if (ret != 1) continue; 

     switch(menu) { 
     case 1: testing(); break; 
     case 2: rewarding(); break; 
     case 3: buying(); break; 
     default: printf("Unknown input %d\n", menu); break; 
     } 
    } 
    return 0; 
} 
Verwandte Themen