天道不酬勤 发表于 2023-12-11 22:20:11

while语句与for语句疑惑

#include<stdio.h>
int main ()
{
      int ch;
      int sum;
      int a = 0, e = 0 ,i = 0, o = 0, u = 0;//计数

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

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

                if(ch == 'e' || ch == 'E')
                {
                        e = e + 1;
                }
                if(ch == 'i' || ch == 'I')
                {
                        i = i + 1;
                }
                if(ch == 'o' || ch == 'O')
                {
                        o = o + 1;
                }
                if(ch == 'u' || ch == 'U')
                {
                        u = u + 1;
                }
                continue;

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

      return 0;
}
int main ()
{
      int ch;
      int sum;
      int a = 0, e = 0 ,i = 0, o = 0, u = 0;//计数

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

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

                if(ch == 'e' || ch == 'E')
                {
                        e = e + 1;
                }
                if(ch == 'i' || ch == 'I')
                {
                        i = i + 1;
                }
                if(ch == 'o' || ch == 'O')
                {
                        o = o + 1;
                }
                if(ch == 'u' || ch == 'U')
                {
                        u = u + 1;
                }
                continue;

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

      return 0;
}
分别使用while循环与for循环,为什么for循环会出现问题?貌似没有语法错误呀{:5_94:}

FishC 发表于 2023-12-11 22:21:10

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

在您给出的两个例子中,while循环和for循环都可以正常执行。但是for循环会出现一个小问题,就是将输入的第一个字符作为循环变量ch的初始值。这样会导致第一个字符无法进入循环体内进行统计。解决这个问题的方法是在for循环之前先读取一次输入的字符,再进行循环。修改后的代码如下:

#include <stdio.h>

int main()
{
    int ch;
    int sum;
    int a = 0, e = 0, i = 0, o = 0, u = 0; //计数

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

    ch = getchar();// 先读取一次输入的字符,保证第一个字符也能统计

    while (ch != '\n') // 统计元音字母
    {
      if (ch == 'a' || ch == 'A')
      {
            a = a + 1;
      }

      if (ch == 'e' || ch == 'E')
      {
            e = e + 1;
      }
      if (ch == 'i' || ch == 'I')
      {
            i = i + 1;
      }
      if (ch == 'o' || ch == 'O')
      {
            o = o + 1;
      }
      if (ch == 'u' || ch == 'U')
      {
            u = u + 1;
      }

      ch = getchar(); // 更新输入的字符
    }

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

    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

天道不酬勤 发表于 2023-12-11 22:25:14

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

问题是出现在for语句上面,使用for循环的这串代码是有问题的,会进入死循环

FishC 发表于 2023-12-11 22:26:05

天道不酬勤 发表于 2023-12-11 22:25
问题是出现在for语句上面,使用for循环的这串代码是有 ...

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

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

以下是已经修改过的代码:

++
#include <stdio.h>

int main() {
    int ch;
    int sum;
    int a = 0, e = 0, i = 0, o = 0, u = 0; //计数
    printf("请输入一个英文句子:");
   
    for (ch = getchar(); ch != '\n'; ch = getchar()) //统计元音字母
    {
      if (ch == 'a' || ch == 'A') {
            a = a + 1;
      }
      if (ch == 'e' || ch == 'E') {
            e = e + 1;
      }
      if (ch == 'i' || ch == 'I') {
            i = i + 1;
      }
      if (ch == 'o' || ch == 'O') {
            o = o + 1;
      }
      if (ch == 'u' || ch == 'U') {
            u = u + 1;
      }
    }
   
    sum = a + e + i + o + u;
    printf("您输入的元音字母有:a(%d),e(%d),i(%d),o(%d),u(%d)", a, e, i, o, u);
    printf("总共为:%d\n", sum);
   
    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: while语句与for语句疑惑