最速怪談選手権

C言語でatoi関数を自作したのですが、正確な答えが出てきません
以下にソースを貼るのでどの当たりを直したらよいのかご教授願います。
1~9までの文字列を一つずつ配列に格納して変換する事を目的として作っています。
実行すると桁あふれしたような値が出てきてしまいます

#include<stdio.h>
#include<stdlib.h>
int pow_10(int m)
{
int i,prod=1;
for(i=0;i<m;i++){
prod=prod*10;
}
return prod;
}
ascii2int(char number[]){
int i,j,n[10],num;
if(!strcmp(number,"")){
printf("Null string\n");
exit(1);
}
i=0;
while(n[i]!='\0'){
n[i]=n[i]-48;
i++;
}
num=0;
for(j=0;j<i;j++){
num=num+n[j]*pow_10(i-1-j);
}
return num;
}

main(){
char su[10];
for(;;){
printf("Enter an integar:");
gets(su);
if(!strcmp("x",su)){
break;
}
printf("%d\n",ascii2int(su));
}
}

A 回答 (3件)

前の人の回答の以下の部分、



number=number+(n-48);


num=num*10 + (n-'0');

にして、
return num;

にするといいんじゃない?

しかし、ascii2intの型がlongって・・・

この回答への補足

変えてみたところできました!
しかし元の質問には1つずつと書いてしまいましたが、配列に9個数字(文字)を入れて関数に渡し、
それを全て数値に変換して戻すというプログラムにしなければならなかったようです。
自分の問題の解釈が間違っているのかもしれません

補足日時:2010/11/19 01:56
    • good
    • 0

long ascii2int(char number[]){


long num = 0L ;
int i=0;
int n ;
while(number[i]!='\0'){
n=number[i] ;
if ( n < '0'
|| n > '9' ) {
return -1 ;
} else {
if ( i > 10 ) {
return -1 ;
} else {
number=number+(n-48);
i++;
}
}
}
return num;
}

この回答への補足

この通りに入力して実行してみましたところ、正の整数を入力しても0が出るのみとなってしまいました

補足日時:2010/11/18 20:20
    • good
    • 0

ascii2intの戻り値の型が定義されていない。


そのなかで、いきなり初期化もしていない自動変数をwhileの制御変数にしている。
もちろん、その中での変数も勘違いかな?

これ以降、追っかけるのがめんどくなったので、読んでないけど、

桁と10の何乗かの解釈が、間違ってない?
    • good
    • 0

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