为什么总和值改变

问题描述

我是C编程的新手。循环后,代码的值必须为0,但它会更改。请帮助某人。

#include<stdio.h>
#include<string.h>

int main(void)
{
int n,i,k,j,sum;

char input[] = "";

scanf("%d",&n);

sum = 0;

for (i = 0; i< n; i++)
{
    scanf("%s",&input[i]);
    
    //sum = sum + (input[i]-48);
}

    printf("%d",sum);
}

解决方法

声明数组但大小保留为空白时,其大小恰好适合初始化时的大小。

在这种情况下,您使用一个1字节长的空字符串(用于终止的空字符)对其进行初始化,因此该数组只有1个字符宽。因此,如果您尝试将任何非空字符串读入此变量,则会超出数组的边界。这样做会调用undefined behavior

首先,使数组至少与您期望的输入一样大,例如:

char input[80];

然后读取一次字符串,将输入限制为数组大小减去1,然后遍历值:

scanf("%79s",input);
for (i = 0; i< n; i++)
{
    sum = sum + (input[i]-48);
}