2

C で書いたこのコードの断片について質問があります。

 printf("Do you own a microwave?Enter 1 for Yes and 0 for No\n");
    while((scanf("%d",&microw))==0){
        printf("Please enter a valid number:\n");
    scanf("%d",&microw);}

私のコンパイラは次のように言っています:「フォーマット%dはタイプの引数を期待していますint*が、引数2にはタイプがあります_Bool*」。私が知る限り、boolean は int 型と見なされていたため、この警告が表示される理由がわかりません。でテストする別の変数を設定し、タイプの別の変数をtrueまたはfalseにscanf割り当てる以外に、この条件をテストするにはどうすればよいでしょうか? _Boolフィードバックをお待ちしております。皆さんに感謝します:)。

4

1 に答える 1

1

それを受け取っているのは、それが を期待していて、int *を渡しているからです_Bool *。どちらも整数ですが、型が異なります。私のシステム_Boolでは、サイズは 1 でint、サイズは 4 です。

必要なものを指定する指定子はないため、最小限のストレージが本当に必要な場合scanfは a を使用する必要があります。後でcharいつでも値を割り当てることができます。_Bool

例えば

scanf("%c",&microw);
_Bool b = microw - '0';

(また、あなたのコードは意図したとおりに動作しません。 で無効な文字を入力すると%d、無限ループに陥ります。)

于 2013-03-16T20:49:21.210 に答える