プロが教えるわが家の防犯対策術!

お世話になります。C言語で配列の計算を勉強しています。
"12345"をchar型配列ss[n]をつくった場合、×1で計算させ表示させるとキャラクタ番号ss[0]=49〜53で表示します。
atoiを使ってint型数値に直したいのですが atoi(const char *str)とエラーメッセージにでてきて上手く使えません。
atoi(const char *str)はプロトタイプ宣言と書いてありました。この使い方について教えて下さい。
ご教示の程よろしくお願いいたします。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

# define MAX 25

int main(void){
int i;
char ss[MAX];

strcpy(ss, "12345");

printf("文字列1[%s]\n",ss); //12345

for(i=0; i<MAX; i++){

printf("文字列2[%d]\n", atoi(const char ss[i]); //エラー
printf("文字列3[%d]",ss[i]); //4950515253と表示

}

return 0;

}

A 回答 (6件)

'1' という文字を1という数字にしたいということですか?


"12345"という文字列を12345(いちまんにせんさんびゃくよんじゅうご)という数字にしたいということですか?

前者:(ss[i] - '0')
後者:atoi(ss)

前者について、'1'や'a'等の文字は、コンピュータの中にその文字そのものを入れておくことができないので、それぞれ対応する数字で表現しています。たとえば'1'は49番に割り当てられています。ちなみに、'1'という表記は「数字の1という文字に対応する番号」を表しています。ここで、'0', '1', ..., '9'は、連続した番号が割り当てられているため、('0' - '0')は0、('1' - '0')は1になるのです。
    • good
    • 1
この回答へのお礼

ありがとうございます。
'1' という文字を1という数字にしたいです。
strcpy(ss, "12345");
でssという配列[0]-[6]まで それぞれ1文字ずつはいっていると思います。
それらを取り出してint型数値1 2 3 4 5 に変換したいです。

お礼日時:2018/06/01 18:39

簡単なのは



printf("%s", ss)

だけど、1個ずつループしたいなら

n=strlen(ss);
for(i=0; i<n; i++) {
printf("%1d", ss[i]-'0');
}
    • good
    • 1
この回答へのお礼

すばらしいです。ありがとうございます。
すごくスッキリしました。
これはatoiとか使わずにできるという事ですね。
No.5のk-841の方が言っておられた('1' - '0')という事ですね。
気付きませんでした。
先達の皆様に深く御礼申し上げます。

お礼日時:2018/06/02 18:28

>printf("文字列2[%d]\n", atoi(const char ss[i]); //エラー


この行を実行した時に、あなたが望む結果はどのような結果なのでしょうか?
それを提示していただけると、より良い回答がつくかと。
    • good
    • 1
この回答へのお礼

ありがとうございます。
strcpy(ss,"12345");と入れると ss[0]にはキャラクタの1が入り、ss[1]にはキャラクタの2が入りそれらをint型の数値 1や2にしたいです。何卒よろしくお願いいたします。

お礼日時:2018/06/01 18:41

具体的に何がやりたいのかがよくわからないのですが。



プロトタイプ宣言というのは、関数がどんな引数でどんな戻り値なのかを指定するものです。
例えば、 strcpy は
char *strcpy(char *dest, const char *src);
のようになっています。
実際に使うときは
strcpy(ss, "12345");
のように型名は入りません。

atoi は「文字列」を数値として解析してintを返す関数です。
「文字」を数値にする関数ではありません。
どうしても ss[i] という1つの「文字」を atoiでintに変換したいのなら、
ss0[0] = ss[i] ;
ss0[1] = '\0' ;
等と「1文字だけの文字列」を用意する必要があります。

普通は、あなたの言う「キャラクタ番号」を使って 数字→数値の計算をします。
「キャラクタ番号」はただの整数なので、普通に整数として計算できます。
    • good
    • 1
この回答へのお礼

お世話になります。
ご回答ありがとうございました。
キャラクターとして用意した配列を使って30桁以上の長桁計算をしたいです。
strcpy(ss,"12345");と入れると ss[0]にはキャラクタの1が入り、ss[1]にはキャラクタの2が入りそれらをint型の数値 1や2にしたいです。

お礼日時:2018/06/01 18:34

> printf("文字列2[%d]\n", atoi(const char ss[i]); //エラー



')' が 1コ 足りないだけじゃないでしょうか?
    • good
    • 2
この回答へのお礼

すいません書き忘れてます。ソース上には)がありました。申し訳ありません。

お礼日時:2018/06/01 18:35

少なくとも、



> printf("文字列2[%d]\n", atoi(const char ss[i]); //エラー

ここは、

printf("文字列2[%d]\n", atoi(ss) );

こんな感じのハズ。
    • good
    • 2
この回答へのお礼

大変迅速にありがとうございます。
forでss配列の箱を0番〜MAXまでの表示しそれを四則演算しようと思っていますので、ssだと文字列"12345"が表示されてしまうのではないでしょうか。またコンパイルもエラーになります。
よろしくお願いいたします。

お礼日時:2018/05/31 18:02

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