• ベストアンサー

入力値が1以下、かつ数字以外の文字の場合・・・

皆様の知恵を貸してください!! 素数判定問題で、 「入力値が1以下、かつ数字以外の文字の場合、その旨 エラーメッセージとして表示&再入力させる」 という要求事項があるのですが… /* キーボードからの入力を受け付ける */ scanf("%d", &number); /**== 入力値をチェック ==**/ /* 入力値が1以下の場合、再入力を促す */ while(number <= 1) { printf("2以上の数を入力してください。\n"); } /* 入力値が数字以外の文字の場合、再入力を促す */ while(★) { printf("数字を入力してください。\n"); } 上記ソースの★のところになんと入れて良いかわかりません!! 課題の提出が明日なので…。 大至急、教えてください。よろしくお願いします!

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

  • ベストアンサー
回答No.3

#1の方の意見に賛成です。 それと、このソースは根本的に間違えています。 このままでは、無限ループになってしまいます。 書き換えると。。。 /* 目的の値が入力されるまで繰り返す */ while(1) { /* キーボードからの入力を受け付け */ scanf(XXX, YYYYYY); /**== 入力値をチェック ==**/ if(数字であるか判定する条件) { if(2以上であるか判定する条件) { /* 入力値が1以下の場合のメッセージを表示 */ printf("2以上の数を入力してください。\n"); } else { break; } } else { /* 入力値が数字以外の文字の場合のメッセージを表示 */ printf("数字を入力してください。\n"); } }

marimo109
質問者

お礼

Aquarius172さん、回答ありがとうございます。 そうですよね、おかしいコードですよね。 投稿してから、あっ!と思いました・・・。

その他の回答 (3)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.4

while文よりもdo while文の方が適してないですか? まぁそれはおいておいて、scanfの返値を利用すれば数値以外が入力されたかどうか判定できますよ

marimo109
質問者

補足

Bonjinさん、回答ありがとうございます。 do while文は使わないこと、という条件が ありまして・・・。 scanfの返値を利用するとは・・・。 初心者名なものですみません。 詳しい説明をおねがいできますか?

回答No.2

> 「入力値が1以下、かつ数字以外の文字の場合… そんな入力を想像できないのですけど、 'かつ'じゃなくて'または'ではありませんか?

marimo109
質問者

補足

確かに「または」です・・・。 ごめんなさい。

  • cats1234
  • ベストアンサー率28% (103/356)
回答No.1

課題は自分で解かなければ意味が無いので、ヒントだけ。 isdigit()という数字判定関数があります。 あとはご自分で頑張ってください。

marimo109
質問者

お礼

cats1234さん、回答ありがとうございます。 isdigit()ですか・・・。 がんばってみます!

関連するQ&A