鱼C论坛

 找回密码
 立即注册
查看: 1171|回复: 11

[已解决]请问可以讲解一下这个程序吗?特别是从第8行开始

[复制链接]
发表于 2020-9-4 20:42:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
qq_pic_merged_1599223118924.jpg
最佳答案
2020-9-5 22:57:00
本帖最后由 风过无痕1989 于 2020-9-5 23:03 编辑
#include <stdio.h>
void main()
{
        char ch[2][5]={"693","825"},*p [2];
        int i,j,s = 0;
        for (i=0;i<2;i++)
                p[i]=ch[i];
        for (i=0;i<2;i++)
                for (j=0;p[i][j]>='0' && p[i][j]<='9';j+=2)
                        s = 10 * s + p[i][j] - '0';
                printf("%d\n",s);
}

第8行的循环条件简单不用说了,第9行的循环条件是:0 <= p[ i ][ j ] <= 9,j += 2 是步进2,等价于 j = j + 2

第10行的意思是:s = 10 * s + p[ i ][ j ] - '0' = 10 * s + p[ i ][ j ] - 48 (这里的 p[ i ][ j ] 值与后面的 '0' 都要转换为 ASCII 码来计算,原因是 s 是整型)

于是循环两次的结果如下:

s = 10 * s + p[0][0] - '0' = 10 * 0 + 54 - 48 = 6
s = 10 * s + p[0][1] - '0' = 10 * 6 + 51 - 48 = 63
s = 10 * s + p[1][0] - '0' = 10 * 63 + 56 - 48 = 638
s = 10 * s + p[1][1] - '0' = 10 * 638 + 53 - 48 = 6385

PS:重新编辑是因为变成了斜体,看着不方便

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 21:18:35 | 显示全部楼层

回帖奖励 +2 鱼币

遍历两个字符串,从0开始,步长为2,提取出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-4 21:21:54 | 显示全部楼层
baige 发表于 2020-9-4 21:18
遍历两个字符串,从0开始,步长为2,提取出来

s=的那一行是什么意思呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-4 21:27:56 | 显示全部楼层
Zingy 发表于 2020-9-4 21:21
s=的那一行是什么意思呢

用于把提取的字符变为整数的,如题目:
s = 10 * 0 + '6' - '0' = 6
s = 10 * 6 + '3'-'0' = 63
s = 10 * 63 + '8' - '0' = 638
s = 10 * 638 + '5' - '0' = 6385
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-4 21:43:22 | 显示全部楼层
鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-5 08:37:36 | 显示全部楼层

回帖奖励 +2 鱼币

鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-5 09:22:25 | 显示全部楼层
币币币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-5 20:12:12 | 显示全部楼层
Fish Coin
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-5 22:57:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风过无痕1989 于 2020-9-5 23:03 编辑
#include <stdio.h>
void main()
{
        char ch[2][5]={"693","825"},*p [2];
        int i,j,s = 0;
        for (i=0;i<2;i++)
                p[i]=ch[i];
        for (i=0;i<2;i++)
                for (j=0;p[i][j]>='0' && p[i][j]<='9';j+=2)
                        s = 10 * s + p[i][j] - '0';
                printf("%d\n",s);
}

第8行的循环条件简单不用说了,第9行的循环条件是:0 <= p[ i ][ j ] <= 9,j += 2 是步进2,等价于 j = j + 2

第10行的意思是:s = 10 * s + p[ i ][ j ] - '0' = 10 * s + p[ i ][ j ] - 48 (这里的 p[ i ][ j ] 值与后面的 '0' 都要转换为 ASCII 码来计算,原因是 s 是整型)

于是循环两次的结果如下:

s = 10 * s + p[0][0] - '0' = 10 * 0 + 54 - 48 = 6
s = 10 * s + p[0][1] - '0' = 10 * 6 + 51 - 48 = 63
s = 10 * s + p[1][0] - '0' = 10 * 63 + 56 - 48 = 638
s = 10 * s + p[1][1] - '0' = 10 * 638 + 53 - 48 = 6385

PS:重新编辑是因为变成了斜体,看着不方便

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 22:58:40 | 显示全部楼层
兄弟,这么多人,讲得还不够清楚吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-21 08:39:00 | 显示全部楼层
问题没解决,帮你顶上去,让更多的人看到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-27 15:19:32 | 显示全部楼层
风过无痕1989 发表于 2020-9-12 22:58
兄弟,这么多人,讲得还不够清楚吗?

不好意思 前几天忙于期末考试~一直没有来论坛(还有不是兄弟,是小姐姐~~~哈哈哈)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-10 07:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表