アプリ版:「スタンプのみでお礼する」機能のリリースについて

非負の数字を入力してもらい表示させ、数字以外を入力した場合は終了するプログラムです↓(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!と小窓がでます。どこがおかしいのでしょうか?

A 回答 (3件)

コンパイルすると警告が出るはずですが、それは確認しましたか?


原因はずばりその表示されているはずの警告文の通りです。

ヒント:変数cxに注目
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/01 17:57

ひょっとすると、入力する文字は1文字だけという暗黙の前提ですか?


scanf() の第2パラメータ以降は変数へのポインタ。
cxのアドレスを与えるには?
ヘルプなどでscanf()の使用例を確認してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/02 02:23

ヒントだけ...



1.
char cx
と定義しているのに、scanf関数で文字列を代入しようとしているように見える。

2.
scanfで文字列を代入する場合、scanf関数に渡すべきは代入先のポインタである

3.
atoi関数の引数はchar型ではなくconst char*型。無理やりキャストを行っても動くわけがありません。

とりあえずcxを
char cx[128]
として、
sacanf("%s", cx)
とすれば動作するでしょう。

理由はよーく考えてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/01 17:46

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