C字符串atoi int数组

Xen*_*ian 3 c arrays

我想做以下事情:

  1. 将输入字符串转换为int.
  2. 通过使用指针和for循环来汇总int数组.
  3. 如果用户只输入ENTER,程序将打印答案.

我的代码:

int main(void)
{
    int i, a[10], sum = 0;
    int * b;
    b = a;
    char c[10];
    printf ("Please enter some numbers:\n");

    for(i = 0 ; i < 10 ; i++)
    {
        (void) fgets(c, (sizeof * b), stdin);
        if(c[0] == '\n')
        {
            break;
        }
        *(b + i) = atoi(c);
        sum = sum + *(b + i);
    }
    printf ("sum : %d \n", sum);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有些奇怪我无法弄清楚为什么.

它只适用于两位数:

$Please enter some numbers:
$32
$31
$1
$
$sum:64
Run Code Online (Sandbox Code Playgroud)

如果我输入三位数,它会直接打印结果:

$Please enter some numbers:
$123
$sum:123


$Please enter some numbers:
$12
$123
$sum:135
Run Code Online (Sandbox Code Playgroud)

如果超过三位数,程序将总结其余数字.

$Please enter some numbers:
$2123
$
$sum:215    //The sum became 212+3.



$Please enter some numbers:
$12345
$11
$
$sum:179    //The sum became 123+45+11.



$Please enter some numbers:
$123456
$sum:579    //If the number of digits is a multiple of 3, this program directly prints sum(=123+456).
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我,我将不胜感激.感谢您阅读这个长期的问题.

Dav*_*eri 5

这是错的:

fgets(c,sizeof* b,stdin);
Run Code Online (Sandbox Code Playgroud)

sizeof *bint(一般4)的大小,你想要10人物的空间:

fgets(c,sizeof c,stdin);
Run Code Online (Sandbox Code Playgroud)

请注意,fgets在这个具体案例之后,你不需要从atoi男人那里去掉尾随的新行:

字符串可以包含在形成整数之后的其他字符,这些字符将被忽略并且对此函数的行为没有影响.