
---------------------------------------
#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になっているのかわかりません。
入力バッファに何か残ってしまっているということなのでしょうか?
以上教えていただけると嬉しいです。
No.1ベストアンサー
- 回答日時:
1を読み込んだ後の .1\n が残ります。
次のループで再度整数を読み込もうとしますが . は整数ではないので読み込みを終了して0を返します。
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);/*終了待ちのダミー入力用*/
}
/* ここまで */
ご回答ありがとうございます。
アドバイスのプログラムを追加してみたところ、入力バッファに残っている文字が、可視化出来るようになりました!
C言語初心者なもので、プログラムを理解するのに時間がかかりそうですが、ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseコンソール表示を、リセ...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
Excel VBAで、Application.Inpu...
-
C言語 While文(ループ)内の...
-
プログラムC言語の整数の約数に...
-
プログラミング初心者です。 Py...
-
UWSCで変数をキー入力
-
"scanf"でエンターで改行させな...
-
Eclipseでコマンドラインを入力...
-
getchar()について 教えてくだ...
-
4桁の数字以外を入力したらエラ...
-
Linuxプログラミングで、キーボ...
-
C言語の入出力関数の違い
-
ワードで文字を入力する時の変...
-
至急!! C言語で多数入力をま...
-
IF文で戻ることはできますか?...
-
入力エラーの処理について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
プログラミング初心者です。 Py...
-
C言語でgetchar();が上手く使え...
-
Excel VBAで、Application.Inpu...
-
電卓の小数点
-
cout関数を使っているのですが...
-
"scanf"でエンターで改行させな...
-
小数か整数かを判定する方法
-
至急教えてください!プログラ...
-
getchar()について 教えてくだ...
-
scanf が無視されます
-
batプログラム上で文字列を入力...
-
コマンドプロンプトからのEOFの...
-
IF文で戻ることはできますか?...
-
プログラミングの問題です 「金...
おすすめ情報