JackLuu 发表于 2020-8-10 00:59:16

while和do while课后习题求解(疑问见注释)

实现功能
A. 将用户输入的字符串中代表数字的字符转换为整型数值
B. 打印转换结果
C. 只打印第一组数字

#include <stdio.h>

int main()
{
      int ch;
      int num = 0;

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

      do//先进入循环
      {
                ch = getchar();//将获取的字符赋值给ch

                if (ch >= '0' && ch <= '9')//如果ch在0和9之间
                {
                        num = 10 * num + (ch - '0');//这个操作是什么意思呢?
                }
                else//如果ch不在0和9之间
                {
                        if (num)//是指ch既不在0和9之间同时num不为0吗时则退出循环吗?
                        {
                              break; // 如果已有数字,则退出循环(这一个是为了实现 只打印第一组数字这个功能吗,怎么解释呢?
                        }
                }

      }
      while (ch != '\n');//如果不是换行,则继续执行循环

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

      return 0;
}

希望大佬通俗的解释一下这个代码的流程谢谢

baige 发表于 2020-8-10 01:05:10

本帖最后由 baige 于 2020-8-10 01:11 编辑

ch = getchar();获取得到的是字符-'0'就变成整形数字
if num 是num不等于0时退出循环
num = 10 * num + (ch - '0'); // 以123\n为例 第一次:num = 10 * 0 + ('1'-'0') = 1; 第二次 num = 10 * 1 +('2'-'0') = 12 第三次 :num = 10 * 12+ ('3'-'0') = 123, 输入'\n'程序跳到else 此时num = 123不等于0 循环break退出
如果你输入123空格456
输出123

baige 发表于 2020-8-10 01:22:30

#include <stdio.h>

int main() {
        char ch;//char类型就行了
        int num = 0;// 用来存储数字

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

        do { //先进入循环
                ch = getchar();//将获取的字符赋值给ch, 获取得到的是字符 字符'0'-'9' 转换为数字 操作为减掉字符'0'

                if (ch >= '0' && ch <= '9') { //如果ch在字符'0'和字符'9'之间
                        num = 10 * num + (ch - '0');//用来纪录数字的,操作上面有例子
                } else { //如果ch不在字符'0'和字符'9'之间
                        if (num) { //如果num!=0循环break退出
                                break; // 如果已有数字,则退出循环(这一个是为了实现 只打印第一组数字这个功能吗,怎么解释呢?是,你输入多组数据 并且不是用换行 会输出第一组非0数字
                        }
                }

        } while (ch != '\n'); //如果不是换行,则继续执行循环

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

        return 0;
}
页: [1]
查看完整版本: while和do while课后习题求解(疑问见注释)