どうも、最近C言語の勉強を始めた超初心者です。
int main(void)
{
int i;
for(;;){
printf("桁数を入力してください。:");
scanf("%d",&i);
if(i<=12)
break;
else puts("もう一度入力してください。");
continue;
}
return(0);
}
上のソース、i<=12の条件を満たさなければループを繰り返すというプログラムなんですけど、数値を入力した場合は思った通りに挙動するのですが、文字や文字列を入力すると永久ループになります。scanf関数で返値を受け取って判定するなどいろいろ試したのですが、どうしても永久ループになってしまいます。
どうしてか教えてください。お願いします。
No.1ベストアンサー
- 回答日時:
これはscanf()の動作としては仕方のないことなのです。
scanf()は%d指定時に数字以外の入力があると暴走します。
したがって、動作の保障が必要なら何らかの手段を講じてやらなければなりません。
例えば一旦文字列として取り込み、数字以外の文字が混じっていないか判定した後に数値に変換するといった具合です。(isdigit()やatoi()を用いて)
#これをscanf()のバグと呼ぶ人もいますが、改修されないところをみると仕様なのでしょうね。
悩んでいたのが、情けなるくらい簡単に謎が解けました。^^;
有り難うございました。
しかし、こんな初歩の初歩で躓いてるようでは先が思いやられます・・・
No.2
- 回答日時:
同じような質問がありますので”scanf”で検索して見て下さい。
少し慣れると、scanfという関数は使わないようです。
参考URLなど参考になるでしょう。
特に、他人に使わせるソフトにはscanfは使用できません。何を入力するか解りませんから、、、
では。
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=88787
以前に本でscanf関数とgotoはあまり使わない方がいいと書いてありました。scanfは何で使わない方がいいのかさっぱり理解できませんでしたが、これで少しだけ納得!
有り難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fflush(stdin)の使い方とprintf...
-
プログラミングの問題です 「金...
-
c言語のプログラムで行列の積を...
-
C言語 逆ピラミッドの作り方
-
電卓の小数点
-
16進数を入力するプログラムを...
-
Excel VBAで、Application.Inpu...
-
プログラミング初心者です。 Py...
-
プログラミング python
-
至急お願いします。プログラミ...
-
scanfが2回使えない・・・?;
-
c言語でひらがなのしりとりをで...
-
c言語の数当てゲームプログラム...
-
ゲームダンジョンの武器の装備...
-
ループ中でのscanfおよびcin
-
C言語について。
-
scanf が無視されます
-
文字列を足し合わせる。
-
永久ループ・・・
-
プログラミングC言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
double型が正常に認識されてい...
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
-
WindowsでEOF
おすすめ情報