鱼C论坛

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

[已解决]while语句与for语句疑惑

[复制链接]
发表于 2023-12-11 22:20:11 | 显示全部楼层 |阅读模式

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

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

x
  1. #include<stdio.h>
  2. int main ()
  3. {
  4.         int ch;
  5.         int sum;
  6.         int a = 0, e = 0 ,i = 0, o = 0, u = 0;//计数

  7.         printf("请输入一个英文句子:");

  8.         while ((ch = getchar()) != '\n')//统计元音字母
  9.         {       if(ch == 'a' || ch == 'A')
  10.                 {
  11.                         a = a + 1;
  12.                 }

  13.                 if(ch == 'e' || ch == 'E')
  14.                 {
  15.                         e = e + 1;
  16.                 }
  17.                 if(ch == 'i' || ch == 'I')
  18.                 {
  19.                         i = i + 1;
  20.                 }
  21.                 if(ch == 'o' || ch == 'O')
  22.                 {
  23.                         o = o + 1;
  24.                 }
  25.                 if(ch == 'u' || ch == 'U')
  26.                 {
  27.                         u = u + 1;
  28.                 }
  29.                 continue;

  30.         }
  31.         sum = a + e + i + o + u;
  32.         printf("您输入的元音字母有:a(%d),e(%d),i(%d),o(%d),u(%d)",a,e,i,o,u);
  33.         printf("总共为:%d\n",sum);

  34.         return 0;
  35. }
复制代码
  1. int main ()
  2. {
  3.         int ch;
  4.         int sum;
  5.         int a = 0, e = 0 ,i = 0, o = 0, u = 0;//计数

  6.         printf("请输入一个英文句子:");

  7.         for (ch = getchar() ; ch != '\n' ;)//统计元音字母
  8.         {       if(ch == 'a' || ch == 'A')
  9.                 {
  10.                         a = a + 1;
  11.                 }

  12.                 if(ch == 'e' || ch == 'E')
  13.                 {
  14.                         e = e + 1;
  15.                 }
  16.                 if(ch == 'i' || ch == 'I')
  17.                 {
  18.                         i = i + 1;
  19.                 }
  20.                 if(ch == 'o' || ch == 'O')
  21.                 {
  22.                         o = o + 1;
  23.                 }
  24.                 if(ch == 'u' || ch == 'U')
  25.                 {
  26.                         u = u + 1;
  27.                 }
  28.                 continue;

  29.         }
  30.         sum = a + e + i + o + u;
  31.         printf("您输入的元音字母有:a(%d),e(%d),i(%d),o(%d),u(%d)",a,e,i,o,u);
  32.         printf("总共为:%d\n",sum);

  33.         return 0;
  34. }
复制代码

分别使用while循环与for循环,为什么for循环会出现问题?貌似没有语法错误呀
最佳答案
2023-12-11 22:26:05
天道不酬勤 发表于 2023-12-11 22:25
问题是出现在for语句上面,使用for循环的这串代码是有 ...

非常抱歉,我之前的回答有误。您是对的,使用for循环的代码确实有问题,会导致进入死循环。

造成这个问题的原因是在for循环的判断条件部分没有进行更新循环变量的操作,导致循环条件始终为真。为了解决这个问题,您只需要在每次循环结束后手动更新循环变量即可。

以下是已经修改过的代码:
  1. ++
  2. #include <stdio.h>
  3. int main() {
  4.     int ch;
  5.     int sum;
  6.     int a = 0, e = 0, i = 0, o = 0, u = 0; //计数
  7.     printf("请输入一个英文句子:");
  8.    
  9.     for (ch = getchar(); ch != '\n'; ch = getchar()) //统计元音字母
  10.     {
  11.         if (ch == 'a' || ch == 'A') {
  12.             a = a + 1;
  13.         }
  14.         if (ch == 'e' || ch == 'E') {
  15.             e = e + 1;
  16.         }
  17.         if (ch == 'i' || ch == 'I') {
  18.             i = i + 1;
  19.         }
  20.         if (ch == 'o' || ch == 'O') {
  21.             o = o + 1;
  22.         }
  23.         if (ch == 'u' || ch == 'U') {
  24.             u = u + 1;
  25.         }
  26.     }
  27.    
  28.     sum = a + e + i + o + u;
  29.     printf("您输入的元音字母有:a(%d),e(%d),i(%d),o(%d),u(%d)", a, e, i, o, u);
  30.     printf("总共为:%d\n", sum);
  31.    
  32.     return 0;
  33. }
复制代码

现在,这段代码应该可以正常地统计输入的元音字母了。非常抱歉给您带来困扰,感谢您的指正!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-11 22:21:10 | 显示全部楼层
您好!对于您的问题,我们来看一下while循环和for循环的区别。while循环是在循环开始之前判断条件是否为真,如果为真则执行循环体内的代码,执行完毕后再次判断条件,并重复这个过程直到条件为假。而for循环则是在每次循环开始之前先执行一次循环变量的初始化,然后判断条件是否为真,如果为真则执行循环体内的代码,执行完毕后更新循环变量,并重复这个过程直到条件为假。

在您给出的两个例子中,while循环和for循环都可以正常执行。但是for循环会出现一个小问题,就是将输入的第一个字符作为循环变量ch的初始值。这样会导致第一个字符无法进入循环体内进行统计。解决这个问题的方法是在for循环之前先读取一次输入的字符,再进行循环。修改后的代码如下:
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int ch;
  5.     int sum;
  6.     int a = 0, e = 0, i = 0, o = 0, u = 0; //计数
  7.     printf("请输入一个英文句子:");
  8.     ch = getchar();  // 先读取一次输入的字符,保证第一个字符也能统计
  9.     while (ch != '\n') // 统计元音字母
  10.     {
  11.         if (ch == 'a' || ch == 'A')
  12.         {
  13.             a = a + 1;
  14.         }
  15.         if (ch == 'e' || ch == 'E')
  16.         {
  17.             e = e + 1;
  18.         }
  19.         if (ch == 'i' || ch == 'I')
  20.         {
  21.             i = i + 1;
  22.         }
  23.         if (ch == 'o' || ch == 'O')
  24.         {
  25.             o = o + 1;
  26.         }
  27.         if (ch == 'u' || ch == 'U')
  28.         {
  29.             u = u + 1;
  30.         }
  31.         ch = getchar(); // 更新输入的字符
  32.     }
  33.     sum = a + e + i + o + u;
  34.     printf("您输入的元音字母有:a(%d),e(%d),i(%d),o(%d),u(%d)", a, e, i, o, u);
  35.     printf("总共为:%d\n", sum);
  36.     return 0;
  37. }
复制代码

这样修改后的程序就能正常统计所有输入的元音字母了。希望能帮到您!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-11 22:25:14 | 显示全部楼层
FishC 发表于 2023-12-11 22:21
您好!对于您的问题,我们来看一下while循环和for循环的区别。while循环是在循环开始之前判断条件是否为真 ...

问题是出现在for语句上面,使用for循环的这串代码是有问题的,会进入死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-11 22:26:05 | 显示全部楼层    本楼为最佳答案   
天道不酬勤 发表于 2023-12-11 22:25
问题是出现在for语句上面,使用for循环的这串代码是有 ...

非常抱歉,我之前的回答有误。您是对的,使用for循环的代码确实有问题,会导致进入死循环。

造成这个问题的原因是在for循环的判断条件部分没有进行更新循环变量的操作,导致循环条件始终为真。为了解决这个问题,您只需要在每次循环结束后手动更新循环变量即可。

以下是已经修改过的代码:
  1. ++
  2. #include <stdio.h>
  3. int main() {
  4.     int ch;
  5.     int sum;
  6.     int a = 0, e = 0, i = 0, o = 0, u = 0; //计数
  7.     printf("请输入一个英文句子:");
  8.    
  9.     for (ch = getchar(); ch != '\n'; ch = getchar()) //统计元音字母
  10.     {
  11.         if (ch == 'a' || ch == 'A') {
  12.             a = a + 1;
  13.         }
  14.         if (ch == 'e' || ch == 'E') {
  15.             e = e + 1;
  16.         }
  17.         if (ch == 'i' || ch == 'I') {
  18.             i = i + 1;
  19.         }
  20.         if (ch == 'o' || ch == 'O') {
  21.             o = o + 1;
  22.         }
  23.         if (ch == 'u' || ch == 'U') {
  24.             u = u + 1;
  25.         }
  26.     }
  27.    
  28.     sum = a + e + i + o + u;
  29.     printf("您输入的元音字母有:a(%d),e(%d),i(%d),o(%d),u(%d)", a, e, i, o, u);
  30.     printf("总共为:%d\n", sum);
  31.    
  32.     return 0;
  33. }
复制代码

现在,这段代码应该可以正常地统计输入的元音字母了。非常抱歉给您带来困扰,感谢您的指正!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 17:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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