为什么这段代码打印的是“123”而不是 3?

ran*_*nee 0 c printf curly-braces

我这里有一些代码:

int n = 0;
for(n = 1;n<4;n++)
printf("%d",n);
return 0;
Run Code Online (Sandbox Code Playgroud)

为什么它返回“123”而不是“3”?

我尝试用谷歌搜索这个问题,但找不到任何有用的东西。

Dou*_*s B 5

问完我的问题后,我想我明白你的意思了。

你有什么

    int n = 0;
    for(n = 1;n<4;n++)
        printf("%d",n);
    return 0;
Run Code Online (Sandbox Code Playgroud)

功能上与

    int n = 0;
    for(n = 1;n<4;n++)
    {
        printf("%d",n);
    }
    return 0;
Run Code Online (Sandbox Code Playgroud)

由于 for 循环需要一条语句,要么是用大括号括起来的语句块,要么是像示例中那样以分号结尾的单个语句。如果您希望它只打印 3 并且出于某种原因想要使用循环来递增数字,那么您需要为其提供一个空语句,如下所示:

    int n = 0;
    for(n = 1;n<3;n++);
    printf("%d",n);
    return 0;
Run Code Online (Sandbox Code Playgroud)

或者

    int n = 0;
    for(n = 1;n<3;n++){}
    printf("%d",n);
    return 0;
Run Code Online (Sandbox Code Playgroud)

两者都只会打印 3。

请注意,因为变量n会递增,然后使用原始边界进行检查n < 4,所以循环将在何时结束n = 4,因此4将被打印。我在最后两个例子中改变了这一点。另请注意术语“返回”的错误使用,正如一些评论指出的那样。