我在C中写了下面的代码求所有数字的和,当我编译运行它时,它成功了。 但是,后来我才意识到我在 for 循环的条件下没有为变量“n”输入任何值。 我对这个程序的工作方式感到困惑,即使没有为条件变量分配值。 我想澄清一下。
#include<stdio.h>
void main()
{
int no,a,b,n,sum=0;
printf("Enter the number to be added");
scanf("%d",&no);
for(int i=0;i<n;i++)
{
a=no%10;
b=no/10;
sum=a+sum;
no=b;
}
printf("The sum is %d",sum);
}
最佳答案
I'm confused on how this program works
好吧,“有效” 在这里是一个非常糟糕的观察/决定。这是 undefined behavior .
您正在尝试使用自动局部变量 n
的值,而它是不确定的。这将调用 UB。
引用 C11
标准,章节 §6.7.9
If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. [...]
因此,在您的情况下,n
满足上述条件,因此内容是不确定的。
现在,在那之后,如果您尝试使用一个变量,而它持有不确定的值,或者
- 没有地址被占用
- 可以有陷阱表示
这种用法会导致未定义的行为。这正是这里的情况。
也就是说,对于托管环境,main()
的一致性签名至少是 int main(void)
。
关于c - 未在 C 中的 for 循环条件中声明的变量仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42628713/