鱼C论坛

 找回密码
 立即注册
查看: 3933|回复: 8

[已解决]if 和switch

[复制链接]
发表于 2022-5-14 18:03:15 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Weabu 于 2022-5-14 18:12 编辑

代码1#include <stdio.h>

int main()
{
        int ch;
        int num, numa = 0;

        printf("请输入一个英文句子:");
        while ((ch = getchar()) != '\n')
        {

                if (ch == 'a' || ch == 'A')
                {
                        num = num + 1;
                        break;
                }
                else if (ch == 'e' || ch == 'E')
                {
                        num = num + 1;
                        break;
                }
                else if (ch == 'i' || ch == 'I')
                {
                        num = num + 1;
                        break;
                }
                else if (ch == 'o' || ch == 'O')
                {
                        num = num + 1;
                        break;
                }
                else if (ch == 'u' || ch == 'U')
                {
                        num = num + 1;
                        break;
                }
               
        }
        printf("其中:a(%d),\n", num);
        return 0;
}
代码2:
#include <stdio.h>

int main()
{
    int ch;
    int num, numa = 0,nume=0,numi=0,numo=0,numu=0;

    printf("请输入一个英文句子:");
    while ((ch = getchar()) != '\n')
    {
        switch (ch)
        {
        case 'a':
            numa=numa+1;
            break;
        case 'e':
            nume=nume+1;
            break;
        case 'i':
            numi=numi+1;
            break;
        case 'o':
            numo=numo+1;
            break;
        case 'u':
            numu=numu+1;
            break;
        }
        num = num + 1;
    }
    printf("您输入的句子中,包含元音字母%d个!\n",num);
    printf("其中:a(%d),e,(%d),i(%d),o(%d),u(%d)\n", numa,nume,numi,numo,numu);
    return 0;
}

为什么我代码1用if语句不能实现代码2switch语句的功能,从输出来看代码1只执行了一次循环(代码1不完整)
最佳答案
2022-5-14 18:28:12


你帖子第一个代码使用的是 if-else 分支,而 break 是退出最近一层 循环 或 switch 条件分支

因为你第一个代码,只有 while 循环,那么自然 break 退出是此循环,导致只执行一次循环就退出

你第二个代码使用 switch 分支,break 在里面的作用就是退出此 switch 分支结构,所以第二个代码不会直接退出 while 循环结构

这是需要实现的功能

这是需要实现的功能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-14 18:06:21 | 显示全部楼层
本帖最后由 Weabu 于 2022-5-14 18:08 编辑

#include <stdio.h>

int main()
{
        int ch;
        int num, numa = 0, nume = 0, numi = 0, numo = 0, numu = 0;

        printf("请输入一个英文句子:");
        while ((ch = getchar()) != '\n')
        {
                if (ch == 'a' || ch == 'A')
                {
                        numa = numa + 1;  
                }
                else if (ch == 'e' || ch == 'E')
                {
                        nume = nume + 1;  
                }
                else if (ch == 'i' || ch == 'I')
                {
                        numi = numi + 1;
                }
                else if (ch == 'o' || ch == 'O')
                {
                        numo = numo + 1;
                }
                else if (ch == 'u' || ch == 'U')
                {
                        numu = numu + 1;
                }
                num = num + 1;
        }
        printf("您输入的句子中,包含元音字母%d个!\n", num);
        printf("其中:a(%d),e,(%d),i(%d),o(%d),u(%d)\n", numa, nume, numi, numo, numu);

        return 0;
}

已将代码修改正确,可是为什么加入break会这样呢,break执行不是不会干扰循环吗@Twilight6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 18:28:12 | 显示全部楼层    本楼为最佳答案   


你帖子第一个代码使用的是 if-else 分支,而 break 是退出最近一层 循环 或 switch 条件分支

因为你第一个代码,只有 while 循环,那么自然 break 退出是此循环,导致只执行一次循环就退出

你第二个代码使用 switch 分支,break 在里面的作用就是退出此 switch 分支结构,所以第二个代码不会直接退出 while 循环结构

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-14 19:12:09 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        int d[5] = {0} , i , n                                                          ;
        char a[] = {'a' , 'e' , 'i' , 'o' , 'u' } , c                                   ;
        printf("请输入一个英文句子 : ")                                                 ;
        for(n = 0 ; (c = getchar()) != '\n' ; n ++) {
                if(c >= 'A' && c <= 'Z') c += ' '                                       ;
                for(i = 0 ; i < 5 ; i ++) {
                        if(c == a[i]) {
                                d[i] ++                                                 ;
                                break                                                   ;
                        }
                }
        }
        printf("您输入句子中,包含元音字母%d个!\n" , d[0] + d[1] + d[2] + d[3] + d[4]) ;
        printf("其中:%c(%d)" , a[0] , d[0])                                            ;
        for(i = 1 ; i < 5 ; i ++) printf(",%c(%d)" , a[i] , d[i])                      ;
        printf("\n")                                                                    ;
}
        编译、运行实况:
D:\[00.Exercise]\[C]>g++ -o x x.c

D:\[00.Exercise]\[C]>x
请输入一个英文句子 : I Love FishC.com
您输入句子中,包含元音字母5个!
其中:a(0),e(1),i(2),o(2),u(0)

D:\[00.Exercise]\[C]>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-16 06:53:17 | 显示全部楼层
本帖最后由 Weabu 于 2022-5-16 06:59 编辑
jackz007 发表于 2022-5-14 19:12
编译、运行实况:


#include <stdio.h>

int main(void)
{
        int d[5] = {0} , i , n //这里看不懂,int d[5]={0},那d[0]~[5]分别代表的是什么呢?                                                     ;
        char a[] = {'a' , 'e' , 'i' , 'o' , 'u' } , c //这里a[]为什么不在中括号里面输入5                                  ;
        printf("请输入一个英文句子 : ")                                                 ;
        for(n = 0 ; (c = getchar()) != '\n' ; n ++) {
                if(c >= 'A' && c <= 'Z') c += ' ' //这个c+=‘ ’是干嘛的                                      ;
                for(i = 0 ; i < 5 ; i ++) {
                        if(c == a[i]) {
                                d[i] ++//这一步是干嘛的                                                 ;
                                break                                                   ;
                        }
                }
        }
        printf("您输入句子中,包含元音字母%d个!\n" , d[0] + d[1] + d[2] + d[3] + d[4]) ;
        printf("其中:%c(%d)" , a[0] , d[0])                                            ;
        for(i = 1 ; i < 5 ; i ++) printf(",%c(%d)" , a[i] , d[i])                      ;
        printf("\n")                                                                    ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-16 11:21:34 | 显示全部楼层
本帖最后由 jackz007 于 2022-5-16 11:22 编辑
        int d[5] = {0}  // 定义 d 为含有 5 个元素的一维整型数组,并将 d 的所有 5 个元素初始化为 0 值。
        char a[] = {'a' , 'e' , 'i' , 'o' , 'u'}  // 定义 a 为含有 5 个元素的一维字符数组,并分别用 'a'、'e'、'i'、'o'、'u' 进行初始化,由于已经初始化数组的所有元素,数组元素的数量已经确定,所以,方括号内可以是空的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-16 13:48:46 | 显示全部楼层

好的,谢谢耐心解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-16 19:06:39 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-20 15:30:29 | 显示全部楼层
第一个是if一直在嵌套,所以只能去验证第一个字幕是不是元音字母,相当于没有循环验证所有字母
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 11:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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