0

私に答える前に、私は現在 C++ を学んでおり、C++ についての知識しかありません。

例を次に示します。ユーザーには言語の選択が表示され、ユーザーは言語の左側に数字を入力して選択する必要があります。そうしないと、再び選択に戻ります。

だから私は考えを持っています:メイン関数を最初に置き、言語関数を最後に置きます。しかし問題は、メイン関数が言語関数の前にあるため、メイン関数が言語関数を見つけることができず、プログラムを終了することです (もちろん、この問題のために、ソース コードをコンパイルすることはできません)。

コード例は次のとおりです。

int main() {
    language();                     // The main function redirect user to the language function
}

int language() {                    // The language() function 
    std::cout << "1 for cookie!";        
    std::cin >> choice;             // Ask user for choice
    if (choice == 1) {
        choice1();                  // If the choice is 1, user will be redirected to choice1() function
    } else {
        main()                      // Otherwise user will be redirected to main and of course, redirect to language() function again
    }
}

上記の問題のため、プロジェクトを再ビルドすると、Code::Blocks IDE から警告が表示されました。

エラー: 'language' はこのスコープで宣言されていません

ユーザーを関数から別の関数にリダイレクトする他の方法はありますか?

編集:現在の回答により、無限ループに陥りました。これは、私が見たい結果ではありません。私が見たい結果は、ユーザーが無効な値を入力した場合、ユーザーが現在いる機能にユーザーをリダイレクトし、コードは一度だけ実行する必要があることです。(無限ループではないことを意味します)

4

7 に答える 7

1

呼び出しの前に関数のプロトタイプを配置する必要があります。

int language(); // Declare the function, it is the prototype of the function here

int main() {
    language();                     // The main function redirect user to the language function
}

int language() {                    // The language() function 
    std::cout << "1 for cookie!";        
    std::cin >> choice;             // Ask user for choice
    if (choice == 1) {
        choice1();                  // If the choice is 1, user will be redirected to choice1() function
    } else {
        // main(); // <- You cannot do this !!
        language(); // Use recursive code
    }
}

以下のコードに注意してください。

  • language();の前に関数のプロトタイプを追加しましたmain
  • main標準で禁止されている whoへの呼び出しを変更し、関数を再帰的にしました。
于 2013-08-13T14:29:37.930 に答える
0

私はこのようなものを書くだろう

do //forever
{
    int choice = 0;
    std::cout << "1 for cookie!";        
    std::cin >> choice;
    if (choice == 1)
    {
        choice1();
        break;
    }
} while (true)
于 2013-08-13T15:02:09.683 に答える