问题描述
我是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);
}