鱼C论坛

 找回密码
 立即注册
查看: 1400|回复: 3

[已解决]关于do while

[复制链接]
发表于 2020-3-1 16:22:48 | 显示全部楼层 |阅读模式

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

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

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         int ch;
  5.         int num = 0;

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

  7.         do
  8.         {
  9.                 ch = getchar();

  10.                 if (ch >= '0' && ch <= '9')
  11.                 {
  12.                         num = 10 * num + (ch - '0');
  13.                 }
  14.                 else
  15.                 {
  16.                         if (num)
  17.                         {
  18.                                 break; // 如果已有数字,则退出循环
  19.                         }
  20.                 }

  21.         }
  22.         while (ch != '\n');

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

  24.         return 0;
  25. }
复制代码


这个是课后作业13里面的,表示看不懂那个(ch-'0'),
还有
  1.   else
  2.                 {
  3.                         if (num)
  4.                         {
  5.                                 break; // 如果已有数字,则退出循环
  6.                         }
  7.                 }
复制代码
这一段又什么用啊?我删了之后代码还可以照常运行的啊
最佳答案
2020-3-1 16:57:54
第一个问题:(ch-'0')的用处
ch = getchar(); getchar返回的是一个字符类型,如果你输入5,实际上ch里存储是字符'5' 对照ASCII码就是十进制的53
而后续程序中需要用字符‘5’的数值5来计算,转换方法就是ch-'0' 字符'0'的ASCII码是48 这样53-48就是数值5
如果你熟悉ASCII码可以直接写成 ch - 48 ,如果你不熟悉那就用 ch-'0' 实际效果是一样的。

第二个问题:
这段代码的用处是 如果你想输入的是12345 但是你输完了123突然按错了按了一个e
这个时候程序就会进入这一段代码,此时num不是0直接跳出循环,然后输出。
这段代码的用处就是实现了一个按除数字键以外的任意键结束程序输出结果的功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-1 16:57:54 | 显示全部楼层    本楼为最佳答案   
第一个问题:(ch-'0')的用处
ch = getchar(); getchar返回的是一个字符类型,如果你输入5,实际上ch里存储是字符'5' 对照ASCII码就是十进制的53
而后续程序中需要用字符‘5’的数值5来计算,转换方法就是ch-'0' 字符'0'的ASCII码是48 这样53-48就是数值5
如果你熟悉ASCII码可以直接写成 ch - 48 ,如果你不熟悉那就用 ch-'0' 实际效果是一样的。

第二个问题:
这段代码的用处是 如果你想输入的是12345 但是你输完了123突然按错了按了一个e
这个时候程序就会进入这一段代码,此时num不是0直接跳出循环,然后输出。
这段代码的用处就是实现了一个按除数字键以外的任意键结束程序输出结果的功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-1 17:04:46 | 显示全部楼层
补充一下,字符0~字符9 在ASCII中是按顺序排下来的,对应十进制是48~57
所以任何一个数字字符减去字符0 得到的都是数字字符本身所代表的数字值

同理这一点也可以用在大小写转换上,不需要查具体的表,我们只需要直到字符A~字符Z和
字符a~字符z都是按顺序排列的,('a' - 'A' )就是想大写转换为小写的差值,这时候任意一个大写字母
只需要加上这个差值就能得到他对应的小写字母 'F' + ('a' - 'A' ) = ‘f’
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-1 17:30:45 | 显示全部楼层
SHRS23 发表于 2020-3-1 16:57
第一个问题:(ch-'0')的用处
ch = getchar(); getchar返回的是一个字符类型,如果你输入5,实际上ch里存 ...

谢谢大佬_(:з」∠)_
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 09:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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