dポイントプレゼントキャンペーン実施中!

c言語を学び始めたばかりの者です。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>

main(){
printf("数当てゲームを開始します。\n");

int a,count,n,b;
srand((unsigned)time(NULL));

printf("1~10の中から1つ数字を選びます。\n");

a = (rand()%10)+1;
printf("選びました\n");

for(count=0;;count++){

printf("その数字はズバリ:");
scanf("%d",&n);

//もし数字でなければという文にしたい!!
if (?){
printf("数字を入力してください。\n");
continue;
}

else{

if(n<a){
printf("もっと大きな値です。\n");
printf("%d回間違えました。\n",count+1);
continue;
}

if(n==a){
printf("正解です!!\n");
b=0;
exit(0);

}

if(n>a){
printf("もっと小さな値です。\n");
printf("%d回間違えました。\n",count+1);
continue;
}
}
}
}

というプログラムなのですが数字の判定の仕方が分からなくて最初のifの条件に何をいれればいいのか分からないので分かるかたいましたら教えてもらえないでしょうか?

A 回答 (3件)

scanf("%d",&n);を使っている時点で、数字以外は引数に取れないです。


というか、数字以外を入れた場合、正常に動作しない可能性があります。

数字以外が来ても異常動作しないようにするには、
プログラムの最初の方で、char buf[256];のように宣言し、
fgets(buf, sizeof(buf), stdin);とやって文字列として数字を取得します。

数字かどうかはisdigit(buf[0])すると判定できます。
真面目にやるにはbuf_lenとiも宣言して、こんな感じのプログラムを書きます。
buf[strlen(buf)] = '\0';
buf_len = strlen(buf);
for (i = 0, nodigit = 0; i < buf_len; i++) {
if (!isdigit(buf[i])) {
nodigit = 1;
break;
}
}
if (nodigit) {...数字ではない }
面倒なので、頭だけ数字だったら後は適当でいいかなと思ったりはしますが。

数字の文字列が入っている場合、n = atoi(buf);すると、bufを数字に変換し、nに代入します。

この回答への補足

勉強不足で申し訳ないのですが
if (!isdigit(buf[i]))
ってどういう意味なのでしょうか?
nodigit
ってなんなのでしょうか?

補足日時:2010/01/27 21:03
    • good
    • 0
この回答へのお礼

出来ました!!
ありがとうございました!!

お礼日時:2010/02/05 16:52

基本は #1 の人が言うように fgets() を利用して入力をうけとります。



あとは、取得されたバッファをチェックして、数字に変換ですかね。

チェックの方法はいろいろと好みがありますけど
この場合は数値変換できればよいので strtol() を使うのが楽かなと思います。
# **endptr == '\0' なら数値のみ

Linux用のページですけどPOSIX関数はどのOSでも同じでしょうから
個々の関数の使い方や違いは調べてみてください。

おすすめは
- strtol
- strspn
- sscanf
あたりですかね~

参考URL:http://www.linux.or.jp/JM/
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2010/02/05 16:53

>勉強不足で申し訳ないのですが


>if (!isdigit(buf[i]))
>ってどういう意味なのでしょうか?

回答をしっかり読んでますか?
No.1氏の回答に
>数字かどうかはisdigit(buf[0])すると判定できます。
とあります。
isdigit()は「数字」(数値ではなく、'0'~'9'の文字)かどうかを判断する関数です。
つまり、buf[]に格納された内容が全て数字かどうかを判断しています。

>nodigit
>ってなんなのでしょうか?
「No Digit」つまり「数字ではない」という意味でしょう。
本来なら、その先にnodigitをフラグとして数字以外が入力された場合の処理があるはずです。

この回答への補足

>if (!isdigit(buf[i]))
このような書きかたが出来ることを知らなかったのでごめんなさい。

補足日時:2010/01/28 20:35
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2010/02/05 16:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!