
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ランキング
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ColorをRGBで指定する方法
-
比較回数と交換回数表示について
-
ラップ関数とはどんなものですか?
-
構造体の勉強中です 合計点の高...
-
プログラミング c言語
-
C言語でif文が予想と違う動きを...
-
system関数がうまくいかない
-
C#の質問
-
c言語についてですが
-
c言語マップ探査ゲーム プログ...
-
int型の表せる範囲
-
実数の整数部,小数部の取得
-
エクセル関数で
-
ポインタの配列
-
c言語で「5人の学生の学籍番号...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報