You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言for循环输出疑惑:为何i输出为1而非0?

C语言for循环输出异常问题解答

你遇到的问题和for循环的自增顺序无关,核心问题是你的for循环末尾多写了一个多余的分号,导致循环体和你预想的完全不同。

问题原因拆解

你写的代码中:

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

for(i=0; s[i]; i++);末尾的分号会被C语言识别为循环体是空语句,也就是说for循环会独立执行完毕、完全退出后,才会执行后面大括号里的printf代码。

for循环的实际执行流程

你定义的字符串s = "K",在内存中实际存储为两个字符:索引0位是'K',索引1位是字符串结束符'\0',对应执行逻辑为:

  1. 初始化i=0,判断条件s[0] = 'K'非0,条件成立,执行空循环体,i自增为1
  2. 再次判断条件s[1] = '\0'值为0,条件不成立,for循环终止
    此时退出循环时i的值已经是1,后续执行printf自然会输出i=1。

参考逻辑不适用的原因

你之前了解的for循环等价逻辑里,Output操作属于循环体内部的代码,但你当前代码里的printf完全不在循环体范围内,所以当然不符合这个逻辑。

正确写法参考

如果要让printf在循环内部执行,只需删掉for循环末尾的多余分号即可:

#include<stdio.h>

int main() {
        int i;
        char s[] = "K";

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

修改后程序输出为0 K,和你预想的逻辑一致。

内容的提问来源于stack exchange,提问作者Milan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:24:02