いや、たしかに "int c" ではありますけどね・・・

X-(

まだまだ勉強中の身ではありますが、
たしかに勘違いとかもしますが、ががが・・・

ついさっきisdigit()を使ったわけですよ。
でも一向にwhile文を抜けない。のでいろいろprintf()してみた。

  do{
    printf("enter : ");
    fgets(buf, BUF, stdin);
    seed = atoi(buf);
    printf("buf : %s, seed : %d, isdigit : %d\n", buf, seed, isdigit(seed)); // なにがでるかな
  }while(!(isdigit(seed)));

実行結果

enter : 3
buf : 3
, seed : 3, isdigit : 0
enter : f
buf : f
, seed : 0, isdigit : 0
enter : 6
buf : 6
, seed : 6, isdigit : 0
enter : 

"enter : "と表示されたあとの1文字が僕の入力ですね。

突っ込み(isdigit()が整数に対して0以外返すとしてatoi()に文字渡して0が帰ってきたらisdigit()で0以外になっちゃうじゃん、とか)はともかく、isdigit()で0が!返ってくるんですよ!なんで!
いや、0が返ってきてるからこそ抜けれないわけですが。
なんで0なんだよおぉおぉぉ
うーん、isidigitの検索結果でぱっと見た感じでもあってるし・・・

まあ、でも心配だからちゃんと見ておくか・・・

  • 1件目

http://www.bohyoh.com/CandCPP/C/Library/isdigit.html

文字種テスト関数
isdigit
ヘッダ #include
形 式 int isdigit(int c);
機 能 isdigit関数は、10進数字かどうかを判定する。
返却値 判定が成立すれば0以外の値(真)を返し、成立しなければ0を返す。
うんうん、ctype.hもインクルードしてるし、引数の型もあってるぞ・・・int cだな、うん・・・

じゃあ何が違うんだYO!

  • 2件目

http://www.orchid.co.jp/computer/cschool/CREF/isdigit.html

■isdigit
cが数字か判定

【分類】
文字関数

ん?・・・

【パラメータの型と説明】
パラメータ 説明
int c 判定する文字

【機能説明】
cの文字が'0'〜'9'の場合は0以外の値、それ以外の場合は0を返します。

・・・^^;


cの文字が'0'〜'9'の場合は0以外の値、それ以外の場合は0を返します。

・・・^^;

ええええええええええええええええええええ
間違ってるじゃん!検索結果1件目だけどめっちゃ間違ってるじゃん!
いや、そりゃ1件目だから正しいっていうことではないけれどもさ!
僕みたいに勘違いしてる人が見たら「よし、あってるな」ってなるよ!

  • そりゃあよく考えてみたらctype.hだしint cだし、その時点で気づけよって言う気がしないでもないけど!
  • だけど別にctypeだから文字ですよとか言われたわけじゃないし・・・短いなりにも経験的に文字っぽいにほいは確かにするけどさー・・・
  • いや、というかよく見れば1件目にも文字種テスト関数って書いてあるぞ!間違ってない!不思議!
  • それに他のis系関数と同系統なわけだからそこを考えれば文字であることはわかる。
  • でも実際サイト見ればわかるけどとーしろーの人がぱっとみて'0'〜'9'だとわかるとは思えない。

あ、別に批判しようってわけじゃないんですけどね。
理解できるだけの情報はあったし、勘違いしてたのは僕のほうだからね。

でも正直これはひっかかる。char型は整数だしgetc()の返り値がint型なのも理解してたつもりなんですけどね・・・

今わかったこと

    • isdigit()は'0'〜'9'のとき0以外が返ってくるよ。
    • とりあえず明日締め切りのレポートは間に合わない。