鱼C论坛

 找回密码
 立即注册
查看: 2222|回复: 5

[已解决]为什么S1E13的最后一题要用do while语句,单纯while不可以吗?

[复制链接]
发表于 2021-10-15 12:55:49 | 显示全部楼层 |阅读模式
5鱼币
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         int ch;
  6.         long long num = 0;
  7.         long long temp; // 临时变量,用于测试是否超出范围
  8.         int is_overflow = 0;

  9.         const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
  10.         const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);

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

  12.         do
  13.         {
  14.                 ch = getchar();

  15.                 if (ch >= '0' && ch <= '9')
  16.                 {
  17.                         temp = 10 * num + (ch - '0');
  18.                         if (temp > max_int || temp < min_int)
  19.                         {
  20.                                 is_overflow = 1;
  21.                                 break;
  22.                         }
  23.                         else
  24.                         {
  25.                                 num = temp;
  26.                         }
  27.                 }
  28.                 else
  29.                 {
  30.                         if (num)
  31.                         {
  32.                                 break; // 如果已有数字,则退出循环
  33.                         }
  34.                 }

  35.         }
  36.         while (ch != '\n');

  37.         if (is_overflow)
  38.         {
  39.                 printf("数值超出范围,结果未定义!\n");
  40.         }
  41.         else
  42.         {
  43.                 if (!num)
  44.                 {
  45.                         printf("并未找到任何数值!\n");
  46.                 }
  47.                 else
  48.                 {
  49.                         printf("结果是:%d\n", num);
  50.                 }
  51.         }

  52.         return 0;
  53. }
复制代码
最佳答案
2021-10-15 12:55:50
本帖最后由 人造人 于 2021-10-15 13:42 编辑

用 while 也可以
你想用 for、while、do while 都可以的
甚至是使用 goto 也可以

for、while、do while、goto 它们只是在某些情况会比较适合使用而已
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         int ch;
  6.         long long num = 0;
  7.         long long temp; // 临时变量,用于测试是否超出范围
  8.         int is_overflow = 0;

  9.         const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
  10.         const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);

  11.         printf("请输入待转换的字符串:");
  12. /*
  13.         do
  14.         {
  15.                 ch = getchar();

  16.                 if (ch >= '0' && ch <= '9')
  17.                 {
  18.                         temp = 10 * num + (ch - '0');
  19.                         if (temp > max_int || temp < min_int)
  20.                         {
  21.                                 is_overflow = 1;
  22.                                 break;
  23.                         }
  24.                         else
  25.                         {
  26.                                 num = temp;
  27.                         }
  28.                 }
  29.                 else
  30.                 {
  31.                         if (num)
  32.                         {
  33.                                 break; // 如果已有数字,则退出循环
  34.                         }
  35.                 }

  36.         }
  37.         while (ch != '\n');
  38. */
  39.         while(1)
  40.         {
  41.                 ch = getchar();

  42.                 if (ch >= '0' && ch <= '9')
  43.                 {
  44.                         temp = 10 * num + (ch - '0');
  45.                         if (temp > max_int || temp < min_int)
  46.                         {
  47.                                 is_overflow = 1;
  48.                                 break;
  49.                         }
  50.                         else
  51.                         {
  52.                                 num = temp;
  53.                         }
  54.                 }
  55.                 else
  56.                 {
  57.                         if (num)
  58.                         {
  59.                                 break; // 如果已有数字,则退出循环
  60.                         }
  61.                 }

  62.                 if(ch == '\n') break;
  63.         }

  64.         if (is_overflow)
  65.         {
  66.                 printf("数值超出范围,结果未定义!\n");
  67.         }
  68.         else
  69.         {
  70.                 if (!num)
  71.                 {
  72.                         printf("并未找到任何数值!\n");
  73.                 }
  74.                 else
  75.                 {
  76.                         printf("结果是:%d\n", num);
  77.                 }
  78.         }

  79.         return 0;
  80. }
复制代码

最佳答案

查看完整内容

用 while 也可以 你想用 for、while、do while 都可以的 甚至是使用 goto 也可以 for、while、do while、goto 它们只是在某些情况会比较适合使用而已
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-15 12:55:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2021-10-15 13:42 编辑

用 while 也可以
你想用 for、while、do while 都可以的
甚至是使用 goto 也可以

for、while、do while、goto 它们只是在某些情况会比较适合使用而已
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         int ch;
  6.         long long num = 0;
  7.         long long temp; // 临时变量,用于测试是否超出范围
  8.         int is_overflow = 0;

  9.         const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
  10.         const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);

  11.         printf("请输入待转换的字符串:");
  12. /*
  13.         do
  14.         {
  15.                 ch = getchar();

  16.                 if (ch >= '0' && ch <= '9')
  17.                 {
  18.                         temp = 10 * num + (ch - '0');
  19.                         if (temp > max_int || temp < min_int)
  20.                         {
  21.                                 is_overflow = 1;
  22.                                 break;
  23.                         }
  24.                         else
  25.                         {
  26.                                 num = temp;
  27.                         }
  28.                 }
  29.                 else
  30.                 {
  31.                         if (num)
  32.                         {
  33.                                 break; // 如果已有数字,则退出循环
  34.                         }
  35.                 }

  36.         }
  37.         while (ch != '\n');
  38. */
  39.         while(1)
  40.         {
  41.                 ch = getchar();

  42.                 if (ch >= '0' && ch <= '9')
  43.                 {
  44.                         temp = 10 * num + (ch - '0');
  45.                         if (temp > max_int || temp < min_int)
  46.                         {
  47.                                 is_overflow = 1;
  48.                                 break;
  49.                         }
  50.                         else
  51.                         {
  52.                                 num = temp;
  53.                         }
  54.                 }
  55.                 else
  56.                 {
  57.                         if (num)
  58.                         {
  59.                                 break; // 如果已有数字,则退出循环
  60.                         }
  61.                 }

  62.                 if(ch == '\n') break;
  63.         }

  64.         if (is_overflow)
  65.         {
  66.                 printf("数值超出范围,结果未定义!\n");
  67.         }
  68.         else
  69.         {
  70.                 if (!num)
  71.                 {
  72.                         printf("并未找到任何数值!\n");
  73.                 }
  74.                 else
  75.                 {
  76.                         printf("结果是:%d\n", num);
  77.                 }
  78.         }

  79.         return 0;
  80. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-15 13:38:44 | 显示全部楼层
对于 for 的话,自己改吧
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         int ch;
  6.         long long num = 0;
  7.         long long temp; // 临时变量,用于测试是否超出范围
  8.         int is_overflow = 0;

  9.         const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
  10.         const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);

  11.         printf("请输入待转换的字符串:");
  12. /*
  13.         do
  14.         {
  15.                 ch = getchar();

  16.                 if (ch >= '0' && ch <= '9')
  17.                 {
  18.                         temp = 10 * num + (ch - '0');
  19.                         if (temp > max_int || temp < min_int)
  20.                         {
  21.                                 is_overflow = 1;
  22.                                 break;
  23.                         }
  24.                         else
  25.                         {
  26.                                 num = temp;
  27.                         }
  28.                 }
  29.                 else
  30.                 {
  31.                         if (num)
  32.                         {
  33.                                 break; // 如果已有数字,则退出循环
  34.                         }
  35.                 }

  36.         }
  37.         while (ch != '\n');
  38. */
  39. start_loop:
  40.         {
  41.                 ch = getchar();

  42.                 if (ch >= '0' && ch <= '9')
  43.                 {
  44.                         temp = 10 * num + (ch - '0');
  45.                         if (temp > max_int || temp < min_int)
  46.                         {
  47.                                 is_overflow = 1;
  48.                                 //break;
  49.                                 goto end_loop;
  50.                         }
  51.                         else
  52.                         {
  53.                                 num = temp;
  54.                         }
  55.                 }
  56.                 else
  57.                 {
  58.                         if (num)
  59.                         {
  60.                                 //break; // 如果已有数字,则退出循环
  61.                                 goto end_loop;
  62.                         }
  63.                 }

  64.                 if(ch == '\n') goto end_loop;
  65.                 goto start_loop;
  66.         }
  67. end_loop:

  68.         if (is_overflow)
  69.         {
  70.                 printf("数值超出范围,结果未定义!\n");
  71.         }
  72.         else
  73.         {
  74.                 if (!num)
  75.                 {
  76.                         printf("并未找到任何数值!\n");
  77.                 }
  78.                 else
  79.                 {
  80.                         printf("结果是:%d\n", num);
  81.                 }
  82.         }

  83.         return 0;
  84. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-15 15:04:15 | 显示全部楼层
do while 是不管正不正确,先运行do的部分,然后再对结果进行while那里的判断,而while则是先判断是否符合条件,再去运行。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-15 15:40:52 | 显示全部楼层
人造人 发表于 2021-10-15 13:36
用 while 也可以
你想用 for、while、do while 都可以的
甚至是使用 goto 也可以

好的,我就是用while写的,没问题,我只是想知道在这个例子里是不是用do-while更合适
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-15 15:47:42 | 显示全部楼层
飞花落尽 发表于 2021-10-15 15:40
好的,我就是用while写的,没问题,我只是想知道在这个例子里是不是用do-while更合适

也不一定
合不合适,也许是自己的一种感觉
我觉得这样也挺好


  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         int ch;
  6.         long long num = 0;
  7.         long long temp; // 临时变量,用于测试是否超出范围
  8.         int is_overflow = 0;

  9.         const int max_int = pow(2, sizeof(int) * 8) / 2 - 1;
  10.         const int min_int = pow(2, sizeof(int) * 8) / 2 * (-1);

  11.         printf("请输入待转换的字符串:");
  12. /*
  13.         do
  14.         {
  15.                 ch = getchar();

  16.                 if (ch >= '0' && ch <= '9')
  17.                 {
  18.                         temp = 10 * num + (ch - '0');
  19.                         if (temp > max_int || temp < min_int)
  20.                         {
  21.                                 is_overflow = 1;
  22.                                 break;
  23.                         }
  24.                         else
  25.                         {
  26.                                 num = temp;
  27.                         }
  28.                 }
  29.                 else
  30.                 {
  31.                         if (num)
  32.                         {
  33.                                 break; // 如果已有数字,则退出循环
  34.                         }
  35.                 }

  36.         }
  37.         while (ch != '\n');
  38. */
  39.         while((ch = getchar()) != '\n')
  40.         {
  41.                 if (ch >= '0' && ch <= '9')
  42.                 {
  43.                         temp = 10 * num + (ch - '0');
  44.                         if (temp > max_int || temp < min_int)
  45.                         {
  46.                                 is_overflow = 1;
  47.                                 break;
  48.                         }
  49.                         else
  50.                         {
  51.                                 num = temp;
  52.                         }
  53.                 }
  54.                 else
  55.                 {
  56.                         if (num)
  57.                         {
  58.                                 break; // 如果已有数字,则退出循环
  59.                         }
  60.                 }
  61.         }

  62.         if (is_overflow)
  63.         {
  64.                 printf("数值超出范围,结果未定义!\n");
  65.         }
  66.         else
  67.         {
  68.                 if (!num)
  69.                 {
  70.                         printf("并未找到任何数值!\n");
  71.                 }
  72.                 else
  73.                 {
  74.                         printf("结果是:%d\n", num);
  75.                 }
  76.         }

  77.         return 0;
  78. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 10:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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