C语言for循环语句执行顺序

#include <stdio.h>
main()
{
char s[]={"012xy"}; int i, n=0;
for (i=0;s[i]!=0;i++)
{

if(s[i]>='a' &&s[i]<='z')
{
n++;
}
}

printf("%d\n",n);
}
因为s[0]=0,所以按理说循环体应该不会被执行,但为什么最后输出的n是2呢?

如for循环 如下:

for(int i=0;i<10;i++)

{

    å¾ªçŽ¯ä½“

}

执行数序是:

    i=0  åˆå§‹åŒ–初值

    i<10 进行判断,如果条件为真,则继续执行

    执行循环体代码

    i++ 变量i自增

    回到第2步,一直循环下去,直到第2步为假, 退出循环.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-01
先计算i++后,才判断s[0]是否为0的!第一次判断是s[1],当然会执行循环体了!追问

谢谢,不过循环体中加printf("i=%d\n",i);之后,输出的i是从0开始的。

第2个回答  推荐于2017-10-08

s[0]=0是错误的

s[0]应该等于48

因为

字符‘0’的asii值是48

可以执行以下代码进行测试

#include<stdio.h>
main()
{
    char a='0';
    printf("%d\n",a);
}

本回答被提问者采纳
第3个回答  2014-03-01
s[i]=0中的0是int类型的0,而s[]是char类型的数字,里面的'0'是字符'0',转换为int为48
应该改为s[i]!='0'
第4个回答  2014-03-01
for(1;2;3){
4
}

1 2 4 3 2 4 3 2 4 3 2 4..... 就这么执行