superswagy2002 发表于 2021-8-16 21:05:40

新手求助

下面的程序中 if (ch >= '0' && ch <= '9')
                {
                        num = 10 * num + (ch - '0');
这个是什么意思我有点看不懂。

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

wangka 发表于 2021-8-16 21:15:25

意思就是你不是输入了一个数吗?他会与0和9大小比较,如果同时满足(&&的用法),则运行num*10+ch(if语句的判断)
懂了吗
求最佳{:10_282:}

superswagy2002 发表于 2021-8-16 21:50:34

wangka 发表于 2021-8-16 21:15
意思就是你不是输入了一个数吗?他会与0和9大小比较,如果同时满足(&&的用法),则运行num*10+ch(if语句的 ...

A. 将用户输入的字符串中代表数字的字符转换为整型数值
B. 打印转换结果版权属于:bbs.fishc.com
C. 只打印第一组数字来自:bbs.fishc.com
提示:你可以使用 break 语句在适当的时候跳出循环。
在这个前提下为什么要这样做

superswagy2002 发表于 2021-8-16 21:51:04

wangka 发表于 2021-8-16 21:15
意思就是你不是输入了一个数吗?他会与0和9大小比较,如果同时满足(&&的用法),则运行num*10+ch(if语句的 ...

为什么那个0和9要加单引号

万千只cnm 发表于 2021-8-17 00:51:30

superswagy2002 发表于 2021-8-16 21:51
为什么那个0和9要加单引号

单引号代表字符 是个整型,ascii字符集
数字+ 30h('0')就等于对应字符
你输入的其实是字符 ,要-'0' 转化为整型

自始而终 发表于 2021-8-17 07:58:33

1.'0' == 30    '1'== 31   以此类推到 '9' 为止
   带单引号的是char型变量,不带的是整形变量
2.char 和 int 在底层上是相通的,说成人话就是char就是化了妆的int
   用的什么化了妆?ascii表,这个你去bing搜一下比我讲的清楚
3.   回到最初的问题,ch >= '0'是在比什么?
      答:假设你给ch输入成 ’a' ,根据ascii表,'a' == 61   ​'0' == 30
             也就是说      ch >= '0'   等效   61 >= 30

注意:看我的答案之前一定先去了解一下ascii表,我会在楼下给你贴一张ascii的图片

自始而终 发表于 2021-8-17 08:01:14

https://baike.baidu.com/pic/ASCII/309296/1/e850352ac65c103880a07b53bc119313b17e8941?fr=lemma&ct=single#aid=1&pic=e850352ac65c103880a07b53bc119313b17e8941

算了{:10_243:}我不会发图片 这个网站里面就有
页: [1]
查看完整版本: 新手求助