鱼C论坛

 找回密码
 立即注册
查看: 1191|回复: 9

[已解决]求大佬解答

[复制链接]
发表于 2022-4-4 15:46:59 | 显示全部楼层 |阅读模式

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

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

x
2. C 语言中有个 atoi 函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。
基本要求
A. 将用户输入的字符串中代表数字的字符转换为整型数值
B. 打印转换结果
C. 只打印第一组数字
提示:你可以使用 break 语句在适当的时候跳出循环。v=2&


#include <stdio.h>

int main()
{
        int ch;
        int num = 0;

        printf("请输入待转换的字符串:");

        do
        {
                ch = getchar();

                if (ch >= '0' && ch <= '9')
                {
                        num = 10 * num + (ch - '0');
                }
                else
                {
                        if (num)
                        {
                                break; // 如果已有数字,则退出循环
                        }
                }

        }
        while (ch != '\n');

        printf("结果是:%d\n", num);

        return 0;
}


这个是啥意思num = 10 * num + (ch - '0');

最佳答案
2022-4-4 16:53:09
HZY222 发表于 2022-4-4 16:38
-‘0’我看懂了,没看懂num*10什么意思啊


1=0*10+1
12=1*10+2
123=12*10+3
1234=123*10+4
可懂???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-4 15:48:52 From FishC Mobile | 显示全部楼层
字符数字变成整型数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 16:00:59 | 显示全部楼层
你看ascii码表就能理解了
用ch字符对应的整型减去 '0'对应的整型,从而实现字符变整型
【10 * num】 + 【(ch - '0');】
可以看成两部分,前面是控制位数,后面是得到该位数上的值

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 16:14:54 | 显示全部楼层
大马强 发表于 2022-4-4 16:00
你看ascii码表就能理解了
用ch字符对应的整型减去 '0'对应的整型,从而实现字符变整型
【10 * num】 + 【 ...

控制位数安啥意思,他前面不是说num=0吗,那为什么要剩10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 16:19:55 From FishC Mobile | 显示全部楼层
HZY222 发表于 2022-4-4 16:14
控制位数安啥意思,他前面不是说num=0吗,那为什么要剩10

不管多新的手,都要了解ascii表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 16:38:52 | 显示全部楼层
wp231957 发表于 2022-4-4 16:19
不管多新的手,都要了解ascii表

-‘0’我看懂了,没看懂num*10什么意思啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 16:50:02 | 显示全部楼层
#include <stdio.h>
int main()
{
        int num=0;
        int ch;
        printf("请输入转换字符;");
        do{
                ch=getchar();
      
            if('0'>=ch&&ch<='9')
        {
                num=ch-'0';
                }
                else
                {
                        break;
                }
               
               
                printf("转换结果为%d\n",num);
               
                       
        }
        while(ch!='\n');
       
        return 0;
}

这个我自己写的,问题出在哪呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-4 16:53:09 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
HZY222 发表于 2022-4-4 16:38
-‘0’我看懂了,没看懂num*10什么意思啊


1=0*10+1
12=1*10+2
123=12*10+3
1234=123*10+4
可懂???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 16:59:49 | 显示全部楼层
wp231957 发表于 2022-4-4 16:53
1=0*10+1
12=1*10+2
123=12*10+3

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

使用道具 举报

发表于 2022-4-4 21:39:51 | 显示全部楼层
HZY222 发表于 2022-4-4 16:14
控制位数安啥意思,他前面不是说num=0吗,那为什么要剩10

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 16:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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