c - 实现 atoi - 递增变量 j 时出现段错误

标签 c algorithm int atoi

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

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

我不允许使用内置的 pow 库,所以我自己实现了一个。该程序仅在输入字符串为个位或十位时才有效,例如:5、56 或 28 等,但不适用于数百或更高的任何数字。 (我在添加 j++ 的那一刻开始收到段错误)

#include <stdio.h>
int pow(int, int);
int i;
int result;
#define SIZE 10
char input[SIZE];
int j = 0;

int main(){
    printf("Enter a word of positive number or quit: ");
    scanf("%s", input);
    int sum = 0;
    for(i = strlen(input)-1; i >= 0; i--){
        printf("pow: %d\n", (input[i] - '0') * pow(10, j));
        sum = sum + ((input[i] - '0') * pow(10,j));
        printf("sum: %d\n", sum);
        j++;
        printf("j: %d\n", j);
    }
    printf("%d\n", sum); 
}

int pow(int base, int exponent){
    if(exponent == 0) return 1;
    if(exponent == 1) return base;
    result = 1;
    for(i = 0; i < exponent; i++){
        result = result * base;
    }
    return result;
}

最佳答案

您已将 i 声明为全局变量。然后它在 main()pow() 中用作迭代器,这是不希望的。这可以通过使迭代器位于循环范围内来解决,如

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

for (int i = 0; i < exponent; i++)

关于c - 实现 atoi - 递增变量 j 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402347/

相关文章:

c - 在 C 中,如果我们在同一操作中将位左移超出范围并再次右移值会发生什么

c - 如果不用指针实现链表会发生什么?

c - Long double 足够大,可以像太阳-冥王星那样存储一个白色毫米精度的距离吗?

r - 二维背包或方形包装的变体

java - 使用数组进行冒泡排序 alg

c语言解释,涉及整数计算

java - 将节点值更改为二叉树中的高度

c# - Eratosthenes 筛法改进后运行速度变慢

swift - 如何在 Swift 中找到 Double 和 Float 的最大值

c - 为什么 unsigned int 小于零是可能的?