言覃Jack 发表于 2020-2-10 17:28:58

新人小白求助

#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 有什么特殊的含义吗?
还有其它字符是怎样过滤掉的。是哪一块的代码起到过滤效果的;

alexw_h264 发表于 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类型输出。

言覃Jack 发表于 2020-2-10 20:18:35

alexw_h264 发表于 2020-2-10 18:29
1. if (ch >= '0' && ch


if (ch >= '0' && ch <= '9'): 例如CH = G1G,它会直接把数字以外都过滤掉的话,它是逐个判定然后过滤掉吗?
num = 10 * num + (ch - '0'); 这个我就是不太理解10*num,另外你说的输入a1b2,会得到12,不知道为啥我的是直接舍弃掉后面的,只得到1,

alexw_h264 发表于 2020-2-10 20:39:41

1. 对,从左往右,依次过滤
2. 嗯,结果是1,不是12。因为对1处理之后,num值为1了,再对b字母处理时,因为if条件不成立,所以走的是下面的else分支,然后因为if(num)是条件成立的,所以就退出while循环了。结果输出为1

alexw_h264 发表于 2020-2-10 20:45:26

对于a1b2这种输入,要完整的输出数字12,可以修改成下面的程序

#include <stdio.h>

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

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

                scanf("%s", str);

      do
      {

                ch = str;

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

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

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

      return 0;
}
页: [1]
查看完整版本: 新人小白求助