fuze11 发表于 2020-4-26 15:52:15

大神们,我看不懂这里面哪里体现出只打印第一组数字

#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;
}

fuze11 发表于 2020-4-26 15:53:04

ch-'0'我也不懂,为什么不能直接写0呢

sunrise085 发表于 2020-4-26 16:49:32

else控制只打印第一组数字。
比如你输入了asd123a123
进入循环后,前几次循环都是进入else,但是num为0,因此继续循环,读到123的时候,能正常进入if语句块,当getchar读到a的时候就无法进入if而进入了else,这是num已经不为0 了,然后就break跳出循环了

getchar读到的是字符,也就是ASCII码值,用ASCII码值减去'0'才能得到对应的数字,例如:ch是字符'3'的ASCII码值是51,'0'的ASCII码是48,ch-'0'得到的就是数字3了
页: [1]
查看完整版本: 大神们,我看不懂这里面哪里体现出只打印第一组数字