倒悬山下 发表于 2023-4-19 22:14:28

关于for循环的一个问题

#include <stdio.h>
int main()
{
        char ch[] = "ab01c40";
        int a,s = 0;
        for(a = 0 ; ch ; a++)
        {
                if(ch>='0' && ch<='9')
                        s = s*10 + ch - '0';
        }
        printf("%d",s);
}

有这样一段代码,我想问的事for语句的条件表达式ch是什么意思,为什么在执行到ch的时候不停止?而在最后执行完ch后结束?

isdkz 发表于 2023-4-19 22:15:48

本帖最后由 isdkz 于 2023-4-19 22:18 编辑

这段代码的主要目的是从一个包含字符和数字的字符串中提取出所有数字并将它们组合成一个整数。

for语句的条件表达式ch在这里用于检查字符串中的当前字符是否为一个有效字符。

当ch为0时,表示已经到达了字符串的末尾(以空字符'\0'结尾),循环将终止。

在C语言中,字符串的末尾由空字符(值为0)表示,因此ch将在到达字符串末尾时变为0,从而终止循环。

在这个例子中,字符串ch[] = "ab01c40"的长度为7,最后一个字符后面是空字符。循环从索引0开始,执行到索引6(字符'0')。

在执行完ch后,下一个索引a = 7处的字符是空字符,此时ch的值为0,循环结束。所以,循环会在执行完ch后结束。

倒悬山下 发表于 2023-4-19 22:41:05

isdkz 发表于 2023-4-19 22:15
这段代码的主要目的是从一个包含字符和数字的字符串中提取出所有数字并将它们组合成一个整数。

for语句 ...

谢谢{:5_109:}

remake111 发表于 2023-4-20 12:27:03

因为字符串结束符是'\0',对应的ascii是0,因此这个当ch这个字符串如果没到结尾就满足条件

remake111 发表于 2023-4-20 12:27:25

ch[a]的意思

芜湖666 发表于 2023-4-20 13:52:31

ai

hornwong 发表于 2023-4-20 16:12:33

蹭币,谢谢~

sfqxx 发表于 2023-4-20 17:48:30

九霄云外 发表于 2023-4-22 20:32:12

解释的很好
页: [1]
查看完整版本: 关于for循环的一个问题