0

ここに、ループの最初のシーケンスの後に「エラー」を出力するコードがあります。以前の質問によると、C の do-while ループの後に「エラー」ステートメントを出力するため、ループの最初の条件のみを読み取るためです。 「短絡」であり、ループの最初のシーケンスの後にのみ実行されます...解決した後も「エラー!」を表示できないため、追加&& getch()してみましたが、次の出力が得られました

Error!

「エラー!」の原因となった条件が 3 つ (複数) あります。最初のシーケンス内で実行されるようにするには、C が複数の条件にどのように応答するかを知りたいです。これは、エラーの解決に役立つ可能性があります。

私のコード:

#include <stdio.h>
#include <conio.h>

void main(){
    int inp;
    while(inp<10 && printf("Error") && getch()){
        clrscr();
        printf("Enter Number > 10: ");
        scanf("%d",&inp);
    }
    printf("Right Answer!");
    getch();
}
4

3 に答える 3

3

int inp;初期化されていません。また、main返す必要がありintます。自動変数はデフォルト値に初期化されません。このようなテストは、ジャンク値になる可能性があるinp<10ため未定義です。inp

必要なのはこれだけです:

#include <stdio.h>

int  main(){
    int inp = 0;
    while(inp<10 && printf("Error\n") )
    {
        printf("Enter Number > 10: ");
        scanf("%d",&inp);
    }
    printf("Right Answer!");
    getchar();
}

conio.hC 標準ライブラリの一部ではありません。しかし、コメントでアンワインドで述べたように、上記のコードはError不必要に 1 回出力されます。コードを次のように再設計できます。

#include <stdio.h>

int  main(){
    int inp = 0;
    while(1 ) // always true
    {
        printf("Enter Number > 10: ");
        scanf("%d",&inp);
        if(inp<10 )
            printf("Error\n");
        else
            break; // break out of while loop
    }
    printf("Right Answer!");
    getchar();
}
于 2013-10-31T13:23:07.127 に答える
1

あなたが持っている場合はC言語の短絡評価によると&&||または?条件が必要でない場合はすべての条件を評価しません例を参照してください:

if(0 && printf("ERROR!\n"))
  printf("OK\n");

(0 && whatever)は常に false として評価されるため、テキストを印刷することはあり&&ません。

if(printf("ERROR!\n") && 0)
      printf("OK\n");

はテキストを出力し、ゼロ (7) より大きい数値を返すので、条件は両方の条件を false と評価するものに縮小さERROR!れますが、メッセージは出力されます。printf("ERROR!\n")(7 && 0)ERROR!

より多くの&&演算子がある場合、それらは左から右の順序で評価されるため、次のようになります。

if( ( (inp<10 && printf("Error")) && getch() ) && ... )

そのため、最初に が 10 未満かどうかをチェックinpし、真の場合にのみ印刷を続行しErrorます...

于 2013-10-31T14:31:42.487 に答える