2016-04-18 11 views
1

「1」の最初の機能の直後にプログラムを終了するのではなく、別の機能に進む方法を選択するにはどうすればよいですか?他の機能を選択するためにメニューを再作成するようなものがあります。例:2または3現在の機能を完了したら、別の機能に進むように選択するにはどうすればよいですか?

#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

「メイン」のループ。 – LogicStuff

+0

@LogicStuff申し訳ありません、私は初心者です。より具体的になりますか?または作品を見せる? ありがとう –

+0

CまたはC++でループを使用する方法をお読みください。そこには無数の例があります。それは手続き型言語の基本的なツールの1つです。 – paddy

答えて

0

はしばらく(真){...}ループの中で、あなたのメニューや機能の呼び出しのものをラップし、「終了」の第4回のメニュー項目とそれ以外のコードの場合(メニューを作る== 4){ブレーク; }

例:

#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; 
} 

"壊す" 文はすぐにしばらく()ループとアプリケーションが終了をキャンセルします。他のすべての選択肢は、対応する機能を実行し、メニューに戻る。

testing()、rewarding()、またはbuying()の呼び出しを囲む括弧は、式をグループ化するために使用され、式が1つだけ必要な場合は不要です。私はそれらを私のifから削除しましたが、それは味の問題です。

また、関数の戻り値の型も指定する必要があります。あなたが値を返す必要がない場合は、ユーザー入力を取得するコードの周りwhileループを使用し

+0

あなたは正しいです。私はそれを修正した。これはNotepad.exeにコードを書いてコンパイルしようとしても起こりません;) –

0
  1. (あなたはまた、リターン機能から文を削除する必要があると思います)} {)( を のボイドテストを使用それで何かをする。
  2. ループを終了するオプションを指定します。
上記に加えて


// 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); 
    } 
} 

...

変更intvoidからmainの戻り値の型。これは、標準的な準拠方法であるmainを定義する方法です。

int main() { ... } 
0

whileループを使用します。 switchif-elseよりも明確です。

scanfの戻り値に注意してください。0,1またはEOFとなる可能性があります。我々はそれが1のときに進んでほしい。

#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; 
} 
関連する問題