胚芽鞘 发表于 2022-9-16 21:40:43

c语言作业while循环的一道题

(题目附了图片)
if后面都有点不明白,为什么num要进行那一系列操作,后面的也不懂{:10_250:}



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





jackz007 发表于 2022-9-16 21:50:38

本帖最后由 jackz007 于 2022-9-16 22:09 编辑

      num = 0                                     ;
      do {
                ch = getchar()                      ;
                if (ch >= '0' && ch <= '9') {
                        num = 10 * num + (ch - '0') ;
                } else {
                        if (num) break            ;
                }
      } while(ch != '\n')                         ;
      假如键入的是 'Abc985abc'
      那么:
      第1次循环:ch = 'A'      (ch >= '0' && ch <= '9') 为 false       执行第 7 行   if(num) break       num = 0 为false      结果,不会执行 break 语句,什么都不做
      第2次循环:ch = 'b'      (ch >= '0' && ch <= '9') 为 false       执行第 7 行   if(num) break       num = 0 为false      结果,不会执行 break 语句,什么都不做
      第3次循环:ch = 'c'      (ch >= '0' && ch <= '9') 为 false       执行第 7 行   if(num) break       num = 0 为false      结果,不会执行 break 语句,什么都不做
      第4次循环:ch = '9'      (ch >= '0' && ch <= '9') 为 true      执行第 5 行num = 10 * num + (ch - '0') = 10 * 0   + '9' - '0' = 9
      第5次循环:ch = '8'      (ch >= '0' && ch <= '9') 为 true      执行第 5 行num = 10 * num + (ch - '0') = 10 * 9   + '8' - '0' = 98
      第6次循环:ch = '5'      (ch >= '0' && ch <= '9') 为 true      执行第 5 行num = 10 * num + (ch - '0') = 10 * 98 + '5' - '0' = 985
      第7次循环:ch = 'a'      (ch >= '0' && ch <= '9') 为 false       执行第 7 行   if(num) break       num = 985 为 true      结果,执行 break 语句,结束循环。

      所以,最终,num = 985。

howzyao 发表于 2022-9-16 23:13:57

本帖最后由 howzyao 于 2022-9-16 23:15 编辑

你这题目很考验基础啊.
刚试了一下:
'd'      -'0'   == 4
116       ->            52 ==后退64个== '0' 的含义

这题除了这,我也想知道,它想表达什么道理.

桃花飞舞 发表于 2022-9-17 03:39:08

楼主还是高级会员。if语句判断条件是否是数字字符,不过一楼已经写的很清楚了,如果实在不清楚就结合ASCII码表来看。

howzyao 发表于 2022-9-17 11:45:09

do
      {
                ch = getchar();

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

      }
      while (ch != '\n');

我说我怎么想不到呢,受到启发了,楼上的,谢谢啊
让我对着码表,再仔细想想.
页: [1]
查看完整版本: c语言作业while循环的一道题