
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));
}
}
No.3ベストアンサー
- 回答日時:
前の人の回答の以下の部分、
number=number+(n-48);
を
num=num*10 + (n-'0');
にして、
return num;
にするといいんじゃない?
しかし、ascii2intの型がlongって・・・
この回答への補足
変えてみたところできました!
しかし元の質問には1つずつと書いてしまいましたが、配列に9個数字(文字)を入れて関数に渡し、
それを全て数値に変換して戻すというプログラムにしなければならなかったようです。
自分の問題の解釈が間違っているのかもしれません
No.2
- 回答日時:
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;
}
No.1
- 回答日時:
ascii2intの戻り値の型が定義されていない。
そのなかで、いきなり初期化もしていない自動変数をwhileの制御変数にしている。
もちろん、その中での変数も勘違いかな?
これ以降、追っかけるのがめんどくなったので、読んでないけど、
桁と10の何乗かの解釈が、間違ってない?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
int型とfloat型の演算結果
-
【C++】関数ポインタの使い方
-
int16_t の _t は何?
-
16進数を入力とするatoi関数...
-
std::set<int> で、ある値が何...
-
「{ } で囲むだけ」は正しい?
-
C言語への変換について
-
異なる文字列のマッチングを、D...
-
C言語の課題です
-
(マルチスレッド)_beginthrea...
-
C言語の課題です
-
数字列を3桁ごとにカンマで区切...
-
VC++の配列で
-
ラップ関数とはどんなものですか?
-
実数の整数部,小数部の取得
-
acceptをalarmでタイムアウトさ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
実数の整数部,小数部の取得
-
「{ } で囲むだけ」は正しい?
-
if と配列の組み合わせ
-
ColorをRGBで指定する方法
-
acceptをalarmでタイムアウトさ...
-
systemの戻り値を取得する方法
-
足して100になるような乱数のア...
-
PowerShellがうまくいかない
-
構造体の勉強中です 合計点の高...
-
std::set<int> で、ある値が何...
-
C言語の配列をC++のvectorに高...
おすすめ情報