- ベストアンサー
scanf関数の戻り値について
--------------------------------------- #include<stdio.h> int main(void) { int dt; while(scanf("%d",&dt)==1){ if(dt==0){ printf("0は入力しないでください\n"); puts(""); } else if(dt<0){ dt=-dt; printf("入力値の絶対値は「%d」です\n",dt); puts(""); } else{ printf("入力値の絶対値は「%d」です\n",dt); puts(""); } } return 0; } --------------------------------------- 以上のプログラムについて疑問があります。 scanf関数の戻り値が1の間、繰り返すというもので、入力の時に整数入力ですが、あえて実数である1.1を入れたとします。 scanfの戻り値は1で、dtには整数部の1だけ設定されていたので、これでもうまくいくのかと思ったのですが、次の入力はscanfの戻り値が0になっていて出来ませんでした。 何故0になっているのかわかりません。 入力バッファに何か残ってしまっているということなのでしょうか? 以上教えていただけると嬉しいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1を読み込んだ後の .1\n が残ります。 次のループで再度整数を読み込もうとしますが . は整数ではないので読み込みを終了して0を返します。
その他の回答 (1)
- goosyu
- ベストアンサー率58% (36/62)
scanf()関数仕様の確認は別途必要として。実行環境がある場合は質問者さんのソースの最後にある「return 0;」直前に次のソース追加してみて下さい。1つの確認方法です。 /* ここから */ { char test[256]; int i; printf("\n 追加 scanf()コール開始 \n"); for (i=0;i<256;i++) { scanf("%c", &test[i]); if ('\n'==test[i]) { printf("No.%d 0x%02X : '\\n'\n", i, test[i]); } else { printf("No.%d 0x%02X : '%c'\n", i, test[i], test[i]); } if ('\n' == test[i]) break; } scanf("%s", test);/*終了待ちのダミー入力用*/ } /* ここまで */
お礼
ご回答ありがとうございます。 アドバイスのプログラムを追加してみたところ、入力バッファに残っている文字が、可視化出来るようになりました! C言語初心者なもので、プログラムを理解するのに時間がかかりそうですが、ありがとうございました!
お礼
ご回答ありがとうございます。 .を読み込んでいたということだったのですね! ありがとうございました。