c语言 - 与"for loop"输出混淆



我有一个非常基本的C程序,对它的输出感到困惑:

#include<stdio.h>
int main() {
int i;
char s[] = "K";
for(i=0; s[i]; i++); {
printf("%d ", i);
printf("%c ", s[i]);
}
}

它输出i值为1,但作为这个线程的一个答案:在循环中预增量和后增量之间的区别?

int i = 0; // Initialization
loopStart:
if (i < 5) // Condition
{
Output(i);
i++ or ++i; // Increment
goto loopStart;
}

增量发生在输出(i)之后(相当于printf("%d ", i);),那么为什么i的值是1而不是0?

这是因为;后面的for循环

for(i=0; s[i]; i++);

去掉分号就好了。

for(i=0; s[i]; i++)

这是因为分号将被认为是语句的结束,并且您的printf不是循环的一部分,并且将在循环执行完成后执行。

当您在for循环的末尾添加分号时,执行将在检查for循环中的条件后终止。如果您想要输出:0和:K

然后试试这个

int main()
{
int i = 0;
char s[] = 'K';
for(i = 0; s[]; i++)
{
printf("%d", i);
printf("%c",s[i]);
}
return 0;
}

你的代码块

for(i=0; s[i]; i++); {
printf("%d ", i);
printf("%c ", s[i]);
}

有误导性缩进。使用正确的缩进后,它看起来像这样:

for(i=0; s[i]; i++)
;
{
printf("%d ", i);
printf("%c ", s[i]);
}

可以看到,for循环是空的,带有printf语句的代码块不是for语句的一部分(这意味着它不是循环的一部分)。您需要的内容可能如下:

for(i=0; s[i]; i++) {
printf("%d ", i);
printf("%c ", s[i]);
}

请注意,这段代码与您的代码完全相同,只是去掉了一个分号。

最新更新