LoginSignup
1
2

More than 5 years have passed since last update.

C言語でchar型の数値(1桁)をint型にする方法

Last updated at Posted at 2017-01-03

はじめに

char型の1桁の数値をint型にしたくていろいろ調べたけど、結局よくわからなかったので力ずくで解決した話です。

main.c
int i=1;
char chr='1';
printf("%d %d\n",i,chr);

このようなコードがあったとき、出力は1と49になり、等しくはなりません。
理由は1のAsciiコードが49だからです。

環境

  • Visual C++ 2015 (cl.exe)
  • SublimeText 3

コード

追記

@SaitoAtsushi さんから「chr-'0'とすればよい」と教えていただきました。

main.c
int i=1;
char chr='1';
printf("%d %d\n",i,chr-'0');

この出力は1 1になります。
@SaitoAtsushi さん、ありがとうございました。

ここから下は力ずくで解決した話です。
あまり参考にしないほうがよろしいかと...

main.c
int ChartoInt(char chr)
{
    switch(chr){
        case '1':return 1; break;
        case '2':return 2; break;
        case '3':return 3; break;
        case '4':return 4; break;
        case '5':return 5; break;
        case '6':return 6; break;
        case '7':return 7; break;
        case '8':return 8; break;
        case '9':return 9; break;
        case '0':return 0; break;
    }

    return 10;
}

こんなコードを書きました。

最後に

atoi()という関数があるようなのですが、うまく動きませんでした。時間もあまりなかったのでこんな方法になってしまいました。
今回は1桁だったのでコードは短くて済んだのですが、桁が増えるとatoi()を使う必要があると思われます。

追記

@shiracamus さんのコメントです。

atoi関数の引数はcharではなくchar *です。つまり、文字ではなく文字列の先頭アドレスを引数に渡さなければいけません。

atoi()がうまく動かなかったのは、引数に「文字」を渡していたのが原因でした。

@shiracamus さん、ありがとうございました。

1
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2