0

いくつかのインターフェースを作成したいと思います。したがって、インターフェースの機能もほとんどありません。

私のメインコードは以下の通りです:

int main (void)
{
    int choice;
    scanf("%d", &choice);
    while(choice != 99)
    {
        switch(choice)
        {
            case 1: title1(); break;
            case 2 : title2(); break;
            default : printf("Error");
        }
        scanf("%d", &choice);     <-- edit
    }
return 0;
}

その他の機能について:

void title1(void)
{
    int choice;
    scanf("%d", &choice);
    while(choice != 99)
    {
        switch(choice)
        {
            case 1: titleA(); break;
            case 2 : titleB(); break;
            default : printf("Error");
        }
        scanf("%d", &choice);     <-- edit
    }
main();
}
void title2()
{
    int choice;
    scanf("%d", &choice);
    while(choice != 99)
    {
        switch(choice)
        {
            case 1: titleC(); break;
            case 2 : titleD(); break;
            default : printf("Error");
        }
        scanf("%d", &choice);     <-- edit
    }
main();
}

プログラムの入力例は次のとおりです。

1   then    99    then    99

しかし、実際は:

1   then    99    then    99  then   99

99プログラムを終了するために追加が必要です。

私がこのように入ると:

1   then    99    then    2    then    99

99プログラムを終了するには、3回入力する必要があります。

の問題は何scanfですか?どうすれば解決できますか?

解決済み:

return 0;main()のをに変更するexit(0);と、正常に動作しますが、それが正しいかどうかはわかりません。

4

3 に答える 3

0

あなたscanf()のsは、値を使用するwhileループの外側にあります-(choice更新されません)。すべてのメソッドが呼び出しますmain()-何ですか?

あなたはおそらく次のようなもっと自己完結型のものが欲しいでしょう:

void title1(void)
{
    int choice=0;
    while(choice != 99)
    {
        scanf("%d", &choice);
        switch(choice)
        {
            case 1: titleA(); break;
            case 2: titleB(); break;
            default: printf("Error"); 
                     break
        }
    }
}
于 2012-11-27T03:57:05.593 に答える
0

とてもシンプルです。デバッガーを使用して、正確に何が起こっているかを確認できます。

編集:より明確にするために title1() を書き直します。

void title2()
{
    int choice;
    scanf("%d", &choice);
    while(choice != 99)
    {
        switch(choice)
        {
            case 1: titleC(); break;
            case 2 : titleD(); break;
            default : printf("Error");
        }
        scanf("%d", &choice);    
    }
    main();
    printf("About to return from title1()\n");//EDIT
    return;//EDIT
}

最初の入力セットを考えてみましょう。

1   then    99    then    99

この場合、1はあなたを の中に連れて行きますtitle1()。内部のループから99抜け出し、再び functionへの呼び出しがあります。そのため、関数内の while ループから抜け出すには、もう 1 つ入力する必要があります。制御不能になった後、「title1() から戻ります」が出力され、オペレーティング システムによって呼び出された関数に制御が戻ります。関数では、ループから出てプログラムを終了するためにもう 1 つ入力する必要があります。whiletitle1()main()99main()whilemain()title1()main()main()99

コールスタックは次のようになります

--------------
    main()
   --------
    title1()
   --------
    main()
--------------

各機能を終了するには、いずれかを入力する必要があります99

GDBのようなデバッガーを使用してプログラムを一通り調べ、何が起こっているのかを正確に把握することを強くお勧めします。

于 2012-11-27T04:48:54.860 に答える
0

私はそれがあなたを助けるかもしれないと思う.....あなたのコードがどのように流れているかを説明しようとしています....

プログラムを開始または実行すると、定義されているように main() 関数に最初に入ります->

int main (void)
{
    int choice;
    scanf("%d", &choice);
    while(choice != 99)
    {
        switch(choice)
        {
            case 1: title1(); break;
            case 2 : title2(); break;
            default : printf("Error");
        }
        scanf("%d", &choice);     <-- edit
    }
return 0;
}

だからあなたは選択のためのデータを入力する必要があり、あなたはそれを1として入力したので、while(choice !=99)は真になり、それはtitle1()に切り替わりますが、主なことはここで起こります....あなたがtitle()に入力すると、あなたは持っています別の int の選択肢を定義し、それはこの関数に対してローカルであるため、値を 99 として再度入力します。これはローカルであるため、この変数に格納されます。その while(choice != 99) が false になるので、再び main() を呼び出します & この呼び出しで main は int の選択を宣言しますが、これには値を再度入力する必要があるため、もう一度 99 を入力してからその while(choice != 99) を入力しますfalse になり、return 0; を呼び出します。& プログラムが終了します。

于 2012-11-27T04:49:38.770 に答える