2016-10-13 6 views
0

バグを防ぐためにプログラム(C言語)をテストしているときに、プログラムが整数を要求したときに\を誤ってクリックしました。その後、whileループが失敗し始めます。例:予期しない入力でループが失敗する(C)

int a; 
while(1){ 
    scanf("%d",&a);printf("%d\n",a); 
    a--; 
    if(a==0){break;} 
} 

数字を入力するときはいつでも、同じ番号を印刷することになっています。しかし、文字を入力すると、前の入力の下にあるすべての数字が印刷され、1より下の数字がすべて印刷され始めます。 誰でもこの問題を解決する手がかりを与えることができますか?どうもありがとう。

編集:このプログラムはバグの一例にすぎず、実際のプログラムはこれよりもはるかに大きいです。

+2

私はscanfを使用しないことをお勧めします。最低でも、戻り値を確認してください。 –

+0

あなたのプログラムの目的は何ですか?あなたが0に達するまで、与えられた数字の下の値を印刷するのですか? – user5478656

+0

@ user5478656このプログラムは、入力するまで入力した内容を印刷します。 –

答えて

0

入力した番号だけを印刷するためにwhileループは必要ありません。

int a; 
    scanf("%d",&a); 
    printf("%d\n",a); 

それとも一つまで入力番号から印刷する場合:これは十分だろう、それはあなたが間違って入力された場合でも、無限ループを作成しないであろうから

int a; 
while(1){ 
    scanf("%d",&a); 
    printf("%d\n",a); 
    a--; 
    if(a<=0){break;} 
} 

使用a<=0を比較すること入力。

0

この場合、----は必要ありません。

int a; 
while(1){ 
    scanf("%d",&a); 
    printf("%d\n",a); 
    if(a==0) 
     break; 
} 
関連する問題