C初学者不终止程序

C beginner not terminating program

我是 C 的初学者,我接到了编写一个简单的求和程序的任务,我必须在其中使用我自己的 atoi 函数。

行为真的很奇怪:
sum 1 -> 工作正常,它写 "the sum is 1"
sum 1 2 -> 它不会终止
sum -1 -2 -> 它只写第一个数字,如果我使用超过 2 它不会终止

这是部分代码,我想错误在mi_atoi,因为如果我使用库函数它可以正常工作:

unsigned int char2int(char c)
{
    return c-'0';
}

int mi_atoi(char *s)
{
    int x = 0;
    if (s[0] == 45) {
        for (i = 1; s[i] != '[=10=]'; i++) {
            x = x*10 - char2int(s[i]);
        }
    }
    else { 
        for (i = 0; s[i] != '[=10=]'; i++) {
            x = x*10 + char2int(s[i]);
        }
    }

    return x;
}

这里是主要的(函数 esNumero 只是检查参数是否是一个数字并且它工作正常):

int main (int argc, char *argv[])
{
    char buf[80];
    int suma = 0;

    for (i = 1; i < argc; i++) {
        if (esNumero (argv[i]) == 0) {
            sprintf (buf, "El parametro \"%s\" no es un numero\n", argv[i]);
            write (1, buf, strlen (buf));
            return 0;
        }
        else {
            suma = suma + mi_atoi(argv[i]);
        }
    }
    sprintf (buf, "La suma es %d\n", suma);
    write (1, buf, strlen (buf));

    return 0;
}

你能看看我的代码并告诉我我做错了什么吗?

您的 i 是一个全局变量,因此在 mainmi_atoi 之间共享。每次调用 mi_atoi,它都会重置 i,因此 main 中的循环永远不会终止。

您通过不 post 声明 i(更不用说 Minimal, Complete, and Verifiable Example)来巧妙地试图隐藏错误,但我们可以看到 i 是未在您执行的函数中声明为局部变量 post.