我正在尝试编写一个列出给定数字因子的程序.它写的时候有用:
int main () {
int num, i;
printf("\nEnter a number: ");
scanf("%d", &num);
for(i == 0; i <= num; ++i) {
if (num % i == 0) {
printf("\n\t%d", i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当for循环是
for(i = 0; i <= num; ++i)
Run Code Online (Sandbox Code Playgroud)
我很困惑因为我认为这是for循环的格式.有人可以指出我的错误吗?
i == 0是一个没有副作用的表达式,因此写入for(i == 0; i <= num; ++i)与写入相同for(; i <= num; ++i),即它在初始化部分中什么都不做.既然你从未i在任何地方初始化,这意味着你调用未定义的行为.
如果你这样做i = 0,i则会被初始化,但你仍然会调用未定义的行为:num % i将导致除以零,因为i在开头会为0.
现在碰巧在你的系统上,除零导致你的程序崩溃,而你使用我未初始化的版本碰巧运行而没有崩溃.这就是为什么你可能已经看到使用i==0"工作" 的版本.