ページ 11

数字が何回打たれたか数えるプログラム

Posted: 2014年7月10日(木) 15:44
by ちひろ。
数字が何回打たれたか数えるプログラムをCで書いたのですが、
なぜかscanfのところで、文字入力後にThread 1:EXC_BAD_ACCESS(code-1,address-0)というエラーが
出てしまいます。(実行環境はxcode)
どなたか原因を教えてください。。
よろしくお願いいたします!!

コード:

#include <iostream>
#include <ctype.h>

int main()
{
    char* inputs; // 入力された文字のアドレス
    int i;
    int counts[10]; // 0~9の数字が何回打たれたか
    
    scanf("%s", inputs);
    
    // countsの初期化
    for (i = 0; i < 10; i++) {
        counts[i] = 0;
    }
    
    // 入力された数字のカウント
    for (i = 0; i < strlen(inputs); i++) {
        if (isdigit(inputs[i])) {
            counts[(int)inputs[i]]++;
        }
    }
    
    // 結果の表示
    for (i = 0; i < 10; i++) {
        printf("%d : %d回\n", i, counts[i]);
    }
}

Re: 数字が何回打たれたか数えるプログラム

Posted: 2014年7月10日(木) 16:23
by usao

コード:

char *inputs; //未初期化.どんな値になってるか不定.
scanf( "%s", inputs );  //inputsが指す場所に,入力されてくる文字列を書き込め,と…
あと,20行目も問題起こすかと.

Re: 数字が何回打たれたか数えるプログラム

Posted: 2014年7月10日(木) 18:43
by ちひろ。
どう直せばいいでしょうか、、?
また、20行目はなんで問題なのですか??

Re: 数字が何回打たれたか数えるプログラム

Posted: 2014年7月10日(木) 19:05
by usao
>どう直せばいいでしょうか、、?

えー…
「scanf()で文字列を読み込んでどうの」的なのは
Cの入門的な練習問題によくあるタイプだと思うので,少し復習されてみては?


>また、20行目はなんで問題なのですか??

コード,ご自身で理解して書いてますか?

コード:

char c = '0';
int i = (int)c;  //iの値はいくつになるのでしょうか?

Re: 数字が何回打たれたか数えるプログラム

Posted: 2014年7月10日(木) 19:50
by ちひろ。
あー、普段Rubyやってるんで普通にキャストされないこと忘れてました笑

scanfに問題があるとは思えないのですが?
なぜなら、if isdigitのブロックの処理を、単純にそのinputsの出力にして実行させると普通に動作しますから。

Re: 数字が何回打たれたか数えるプログラム

Posted: 2014年7月10日(木) 21:05
by みけCAT
ちひろ。 さんが書きました:scanfに問題があるとは思えないのですが?
確かに、ライブラリのscanfの実装の不都合ではなく、使い方が間違っているせいだと思います。
ちひろ。 さんが書きました:if isdigitのブロックの処理を、単純にそのinputsの出力にして実行させると普通に動作しますから。

どういうことかよくわからないので、そのコードを貼っていただけますか?

オフトピック
scanfが使えないなら、fgetsを使えばいいじゃない。(バッファの確保は必要だけど)

Re: 数字が何回打たれたか数えるプログラム

Posted: 2014年7月10日(木) 21:25
by ちひろ。
すいません。自己解決しました!ありがとうございます!!