OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

永久ループ・・・

  • 暇なときにでも
  • 質問No.154748
  • 閲覧数213
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

どうも、最近C言語の勉強を始めた超初心者です。

int main(void)
{
int i;

for(;;){
printf("桁数を入力してください。:");
scanf("%d",&i);
if(i<=12)
break;
else puts("もう一度入力してください。");
continue;
}
return(0);
}

上のソース、i<=12の条件を満たさなければループを繰り返すというプログラムなんですけど、数値を入力した場合は思った通りに挙動するのですが、文字や文字列を入力すると永久ループになります。scanf関数で返値を受け取って判定するなどいろいろ試したのですが、どうしても永久ループになってしまいます。
どうしてか教えてください。お願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル13

ベストアンサー率 37% (419/1115)

これはscanf()の動作としては仕方のないことなのです。
scanf()は%d指定時に数字以外の入力があると暴走します。
したがって、動作の保障が必要なら何らかの手段を講じてやらなければなりません。
例えば一旦文字列として取り込み、数字以外の文字が混じっていないか判定した後に数値に変換するといった具合です。(isdigit()やatoi()を用いて)

#これをscanf()のバグと呼ぶ人もいますが、改修されないところをみると仕様なのでしょうね。
お礼コメント
noname#57874

悩んでいたのが、情けなるくらい簡単に謎が解けました。^^;
有り難うございました。
しかし、こんな初歩の初歩で躓いてるようでは先が思いやられます・・・
投稿日時 - 2001-10-21 08:02:47
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2
レベル11

ベストアンサー率 33% (131/392)

同じような質問がありますので”scanf”で検索して見て下さい。 少し慣れると、scanfという関数は使わないようです。 参考URLなど参考になるでしょう。 特に、他人に使わせるソフトにはscanfは使用できません。何を入力するか解りませんから、、、 では。 ...続きを読む
同じような質問がありますので”scanf”で検索して見て下さい。
少し慣れると、scanfという関数は使わないようです。
参考URLなど参考になるでしょう。
特に、他人に使わせるソフトにはscanfは使用できません。何を入力するか解りませんから、、、
では。
お礼コメント
noname#57874

以前に本でscanf関数とgotoはあまり使わない方がいいと書いてありました。scanfは何で使わない方がいいのかさっぱり理解できませんでしたが、これで少しだけ納得!
有り難うございました。
投稿日時 - 2001-10-21 07:56:29


このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ