茄子爱我 发表于 2021-3-20 10:04:12

奥里给

#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;
}
各位大佬,我想问一下dowhile课程那里的这一道题目,他不是这么理解的吗,那个break遇到数字就会跳出循环,那么遇到第一个数字不是已经跳出循环了吗,比如说ad12as,他的结果不是1吗,为啥是12呢

jackz007 发表于 2021-3-20 12:40:04

      do {
                ch = getchar();
                if (ch >= '0' && ch <= '9') {
                        num = 10 * num + (ch - '0') ; // 数字字符分支
                } else {
                        if(num) break               ; // 非数字字符分支
                }
      } while (ch != '\n')                        ;
      如果键入 "ad12as" 那么,ch 是 'a'、'd' 的时候,走两次非数字字符分支,这时,由于 num = 0,并不会 break 出循环,到了 ch 是 '1'、'2' 的时候,会走两次数字字符分支,这会使 num = 12,到了 ch 是 'a' 的时候,走非数字字符分支,这时,由于 num = 12,会 break 出 while 循环。

茄子爱我 发表于 2021-3-20 17:49:22

我悟了,兄弟,谢谢
页: [1]
查看完整版本: 奥里给