-1
#include <stdio.h>
#include <stdlib.h>

void main()
{
    char counter='Y';
    int howmuch;
    counter=0;
    howmuch=100;

    while (counter=='Y')
    {
        int menu;
        float price;
        float totalprice=0.00;
        printf("please select from menu:");
        scanf ("%i", &menu);

        switch(menu)
        {
        case  1: {
            printf("one hotbox1 =RM10.50");
            totalprice=totalprice+10.50;

            break;
            }
        case   2:{ 
            printf ("one hotbox2=RM10.60");
            totalprice=totalprice+10.60;

            break;
            }

        case   3:{
            printf ("one hotbox3=RM10.70");
            totalprice=totalprice+10.70;

            break;
            }

        }
        printf("add order?(Y/N):");
        scanf ("%c", &counter);
    }
}

カウンターインクリメントのようなカウンター++を使用すると、適切に実行できますが、Y / Nを使用すると(私は良い広告ではありません)、プログラムはその仕事をしていません.誰かこれを説明できますか?私の友人もこれについて知りませんでした、フォーラムで検索してみましたが、手がかりがありませんでした

4

3 に答える 3

0

コメントアウトした場合 counter=0; その後、ループは 1 回だけ機能します。これは、カウンターが char 型であるためです。

printf("please select from menu:");
scanf ("%i", &menu);

stdin バッファーには、メニュー (1 2 または 3 のように選択されたオプション) と改行文字 (Enter キーを押したとき) が入力されます。

次の scanf では、その改行文字がカウンターの入力と見なされます。

上記のコードのwhileループの外側でカウンター値を「%d」として出力してみてから、ASCIIテーブルでクロスチェックしてください。

コードを修正するには、fflush(stdin); を追加するだけです。scanf の後 ("%i", &menu); 以下のように

printf("please select from menu:");
scanf ("%i", &menu);
fflush(stdin);
于 2013-10-10T08:04:38.043 に答える