Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在递增变量j时实现atoi-分段错误_C_Algorithm_Int_Atoi - Fatal编程技术网

C 在递增变量j时实现atoi-分段错误

C 在递增变量j时实现atoi-分段错误,c,algorithm,int,atoi,C,Algorithm,Int,Atoi,C程序首先存储一个数字“134”的字符串输入,并将每个字符存储到一个字符数组中。 然后它从数组“4”的最后一个字符开始,然后乘以10^0,然后下一个元素乘以10^1,依此类推 例: 总和=(4*10^0)+(3*10^1)+(1*10^2) 我不允许使用内置的pow库,所以我自己实现了一个。该程序仅在输入字符串为1或10的情况下工作,例如:5、56或28等,但不适用于任何数百或更高的数字。 (我在添加j++时就开始接收seg故障) #包括 int-pow(int,int); int i; int

C程序首先存储一个数字“134”的字符串输入,并将每个字符存储到一个字符数组中。 然后它从数组“4”的最后一个字符开始,然后乘以10^0,然后下一个元素乘以10^1,依此类推

例: 总和=(4*10^0)+(3*10^1)+(1*10^2)

我不允许使用内置的pow库,所以我自己实现了一个。该程序仅在输入字符串为1或10的情况下工作,例如:5、56或28等,但不适用于任何数百或更高的数字。 (我在添加j++时就开始接收seg故障)

#包括
int-pow(int,int);
int i;
int结果;
#定义尺寸10
字符输入[大小];
int j=0;
int main(){
printf(“输入一个正数字或退出:”);
扫描频率(“%s”,输入);
整数和=0;
对于(i=strlen(输入)-1;i>=0;i--){
printf(“功率:%d\n”,(输入[i]-'0')*pow(10,j));
sum=sum+((输入[i]-'0')*pow(10,j));
printf(“总和:%d\n”,总和);
j++;
printf(“j:%d\n”,j);
}
printf(“%d\n”,总和);
}
整数功率(整数基,整数指数){
如果(指数==0)返回1;
如果(指数==1)返回基数;
结果=1;
对于(i=0;i<指数;i++){
结果=结果*基数;
}
返回结果;
}

您已将
i
声明为全局变量。然后它在
main()
pow()
中用作迭代器,这是不需要的。这可以通过将迭代器设置为循环范围的局部来修复,如下所示

for (int i = strlen(input)-1; i >= 0; i--)

for(int i=0;i
哪些精确输入失败?与其声明每个变量为全局变量,不如在需要时按函数声明它们
i,i,input
vars属于
main
<代码>结果属于
pow
。您可以处理最有效端的数字,将目前为止的值乘以10,然后将下一个数字的值相加。。。保存10的幂。(乘10也可以作为少量的移位和加法来实现,尽管现在全乘更快。)所有全局变量都可以而且应该被消除——这是一种不好的做法。而且这个算法是不必要的复杂
strlen()
pow()
可以消除,在这种情况下,您甚至不需要
输入
缓冲区,您可以使用
getchar()
一次处理一个字符。32位的
int
最多可以是10位十进制数字,所以这里的
SIZE
太小了-如果你必须处理+/-符号,你也需要一个额外的字符。@ChrisHall是真的,但是一个好的编译器已经在
sum=sum*10+(输入[i]-“0”)中做到了这一点如果确实更好。最好让编译器进行优化,或者得到一个更好的编译器。
for (int i = strlen(input)-1; i >= 0; i--)
for (int i = 0; i < exponent; i++)