• ベストアンサー

C言語 コンパイルできるが実行するとエラー

非負の数字を入力してもらい表示させ、数字以外を入力した場合は終了するプログラムです↓(VC使用) ━━━━━━━━━━━━━━━━━━━━━━━━━━ #include "stdafx.h" #include <stdio.h> #include <stdlib.h> /* atoi使用 */ #include <ctype.h> /* isdigit使用 */ int main(void) {   char cx;   int nx;   printf("非負の整数を入力してください。:");   scanf("%s", cx);   if(isdigit(cx) == 0){     printf("数字を入れてください。\n");   }else{     nx = atoi((const char*) cx);   }   printf("%d", nx);   return 0; } ━━━━━━━━━━━━━━━━━━━━━━━━━━ 実行し文字を入力するとDebug Error!と小窓がでます。どこがおかしいのでしょうか?

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

  • ベストアンサー
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.2

コンパイルすると警告が出るはずですが、それは確認しましたか? 原因はずばりその表示されているはずの警告文の通りです。 ヒント:変数cxに注目

ikepan
質問者

お礼

ご返答ありがとうございます。 返事が遅れて申し訳ありませんでした。警告で「初期化されていないローカル変数 'cx' が使用されます」と表示されましたが、cxに文字列を代入するので初期化する必要がないと判断して無視していたのが原因の様ですね。その原因を簡単に説明してくれると助かります。

その他の回答 (2)

  • yuipu
  • ベストアンサー率38% (18/47)
回答No.3

ひょっとすると、入力する文字は1文字だけという暗黙の前提ですか? scanf() の第2パラメータ以降は変数へのポインタ。 cxのアドレスを与えるには? ヘルプなどでscanf()の使用例を確認してみてください。

ikepan
質問者

お礼

ご返答ありがとうございます。 入力する文字制限はなく、1文字でも数字以外が入ると「数字を入れてください」を表示するようにしています。scanfについてもう少し調べてみてみます。

  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.1

ヒントだけ... 1. char cx と定義しているのに、scanf関数で文字列を代入しようとしているように見える。 2. scanfで文字列を代入する場合、scanf関数に渡すべきは代入先のポインタである 3. atoi関数の引数はchar型ではなくconst char*型。無理やりキャストを行っても動くわけがありません。 とりあえずcxを char cx[128] として、 sacanf("%s", cx) とすれば動作するでしょう。 理由はよーく考えてください。

ikepan
質問者

お礼

ご返答ありがとうございます。 返事が遅れて申し訳ありませんでした。cxをchar cx[128]と変更しても実行できず、「'isdigit' : 1 番目の引数を 'char [128]' から 'int' に変換できません。」とエラーがでてコンパイルできませんでした。そしてscanf("%s", cx);をsacanf("%s", cx);と変更しましたが、「'sacanf': 識別子が見つかりませんでした」とエラーがでました。

関連するQ&A

専門家に質問してみよう