• ベストアンサー

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になっているのかわかりません。 入力バッファに何か残ってしまっているということなのでしょうか? 以上教えていただけると嬉しいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

1を読み込んだ後の .1\n が残ります。 次のループで再度整数を読み込もうとしますが . は整数ではないので読み込みを終了して0を返します。

muffler
質問者

お礼

ご回答ありがとうございます。 .を読み込んでいたということだったのですね! ありがとうございました。

その他の回答 (1)

  • goosyu
  • ベストアンサー率58% (36/62)
回答No.2

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);/*終了待ちのダミー入力用*/ } /* ここまで */

muffler
質問者

お礼

ご回答ありがとうございます。 アドバイスのプログラムを追加してみたところ、入力バッファに残っている文字が、可視化出来るようになりました! C言語初心者なもので、プログラムを理解するのに時間がかかりそうですが、ありがとうございました!

関連するQ&A