鱼C论坛

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

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

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

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

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

x
#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循环会出现问题?貌似没有语法错误呀
最佳答案
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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> 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循环的判断条件部分没有进行更新循环变量的操作,导致循环条件始终为真。为了解决这个问题,您只需要在每次循环结束后手动更新循环变量即可。

以下是已经修改过的代码:
++#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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-9 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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