鱼C论坛

 找回密码
 立即注册
查看: 1331|回复: 4

[已解决]新人小白求助

[复制链接]
发表于 2020-2-10 17:28:58 | 显示全部楼层 |阅读模式

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

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

x
#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;
}
整体的代码都基本理解,就是不知道如何把其它字符过滤掉的。
例如:输入A9,结果是:9
num=10*0(59-48)
num=9
这个10*num 有什么特殊的含义吗?
还有其它字符是怎样过滤掉的。是哪一块的代码起到过滤效果的;
最佳答案
2020-2-10 20:45:26
对于a1b2这种输入,要完整的输出数字12,可以修改成下面的程序

#include <stdio.h>

int main()
{
        int ch;
        int num = 0;
                int i = 0;
                char str[100];

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

                scanf("%s", str);

        do
        {

                ch = str[i];

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

                                i++;
        }
        while (ch != '\0');

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

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

使用道具 举报

发表于 2020-2-10 18:29:24 | 显示全部楼层
1. if (ch >= '0' && ch <= '9'): 这里把除了数字之外的字符给过滤掉了
2. num = 10 * num + (ch - '0'); 这里 ch - '0' 就是将输入的数字字符减掉‘0’得到真正的数字值。num = 10*num +..是从左往右数字值,例如'a1b2',得到的就是数值num为12,作为%d类型输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-10 20:18:35 | 显示全部楼层


if (ch >= '0' && ch <= '9'): 例如CH = G1G,它会直接把数字以外都过滤掉的话,它是逐个判定然后过滤掉吗?
num = 10 * num + (ch - '0'); 这个我就是不太理解10*num,另外你说的输入a1b2,会得到12,不知道为啥我的是直接舍弃掉后面的,只得到1,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 20:39:41 | 显示全部楼层
1. 对,从左往右,依次过滤
2. 嗯,结果是1,不是12。因为对1处理之后,num值为1了,再对b字母处理时,因为if条件不成立,所以走的是下面的else分支,然后因为if(num)是条件成立的,所以就退出while循环了。结果输出为1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-10 20:45:26 | 显示全部楼层    本楼为最佳答案   
对于a1b2这种输入,要完整的输出数字12,可以修改成下面的程序

#include <stdio.h>

int main()
{
        int ch;
        int num = 0;
                int i = 0;
                char str[100];

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

                scanf("%s", str);

        do
        {

                ch = str[i];

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

                                i++;
        }
        while (ch != '\0');

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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