• ベストアンサー

プログラムの動きがわからない

現在C言語の勉強をしているのですが、プログラムの動きが(流れ)よくわかりません。 #include <stdio.h> int is_digit(char x) { if(((x)>='0')&&((x)<='9')){ return 1; } else{ return 0; } } main() { char c; c='0'; if(is_digit(c)){ printf("cは数値文字です。\n"); } return 0; } 上記のプログラムなのですがどのように値渡しが行われているかがわかりません。 ちなみにこのプログラムを書き直すとこのように↓なるようです このプログラムだけエラーが出てしまいました。 #include <stdio.h> #define IS_DIGIT(X) (((X)>='0')&&((X)<='9'))?1:0) main() { char c; c='0'; if(IS_DIGIT(c)){ printf("cは文字列です。\n"); } return 0; } ちなみに教本はこれを使っています。http://7andy.yahoo.co.jp/books/detail?accd=31457604

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

  • ベストアンサー
  • jack-a3
  • ベストアンサー率37% (302/797)
回答No.1

ポイントを箇条書きで書きます。 ・プログラムはmain()から開始される ・is_digit()が呼ばれる。パラメタとしてchar型のc(中身は'0')を渡している ・is_digitは渡されたパラメタをchar型のxという変数で受けている ・is_digitではxが'0'~'9'の範囲内であれば1、そうでなければ0が返される ・is_digit()の返り値が真(=1)ならprint文を実行する is_digit()では受け取ったchar変数が'0'~'9'の範囲内である場合に1、そうでなければ0を返すだけなので わざわざ関数にしなくてもIS_DIGITのような式でも同じことができます。 それが後半のプログラムです。 ちなみにエラーになる理由はdefineしているIS_DIGITの式のカッコの対応がおかしいようです。

noname#13733
質問者

お礼

早速のご回答ありがとうございます! 教本に解説が載っていなかったので困惑してしまいました。 ご丁寧に解説していただきありがとうございました!

その他の回答 (1)

回答No.2

「値渡し」と書かれている意図が判りませんが、 文字コード'0'の値を数値判定関数に渡して、 (同じく文字コードの)0以上9以下か判定しているだけでは?プログラムは「数値文字です」と表示されますよね? コードだけで流れが判らなくなったら図を描くのも一つの手段です。デバッガで追っても良いし。 #因みにコンパイラのエラーメッセージは読まれましたか? タイプミスで無い限りマクロの括弧の数が合っていないのでエラーが出るのでは?

noname#13733
質問者

お礼

ご回答ありがとうございます! これからは、質問する前に自分でいろいろ調べてから質問をしようと思います。 ありがとうございました!

関連するQ&A