Weabu 发表于 2022-5-14 18:03:15

if 和switch

本帖最后由 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不完整)

Weabu 发表于 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

Twilight6 发表于 2022-5-14 18:28:12

Weabu 发表于 2022-5-14 18:06
#include

int main()



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

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

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

jackz007 发表于 2022-5-14 19:12:09

#include <stdio.h>

int main(void)
{
      int d = {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) {
                              d ++                                                 ;
                              break                                                   ;
                        }
                }
      }
      printf("您输入句子中,包含元音字母%d个!\n" , d + d + d + d + d) ;
      printf("其中:%c(%d)" , a , d)                                          ;
      for(i = 1 ; i < 5 ; i ++) printf(",%c(%d)" , a , d)                      ;
      printf("\n")                                                                  ;
}
      编译、运行实况:
D:\\>g++ -o x x.c

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

D:\\>

Weabu 发表于 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 = {0} , i , n //这里看不懂,int d={0},那d~分别代表的是什么呢?                                                   ;
      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) {
                              d ++//这一步是干嘛的                                                 ;
                              break                                                   ;
                        }
                }
      }
      printf("您输入句子中,包含元音字母%d个!\n" , d + d + d + d + d) ;
      printf("其中:%c(%d)" , a , d)                                          ;
      for(i = 1 ; i < 5 ; i ++) printf(",%c(%d)" , a , d)                      ;
      printf("\n")                                                                  ;
}

jackz007 发表于 2022-5-16 11:21:34

本帖最后由 jackz007 于 2022-5-16 11:22 编辑

      int d = {0}// 定义 d 为含有 5 个元素的一维整型数组,并将 d 的所有 5 个元素初始化为 0 值。
      char a[] = {'a' , 'e' , 'i' , 'o' , 'u'}// 定义 a 为含有 5 个元素的一维字符数组,并分别用 'a'、'e'、'i'、'o'、'u' 进行初始化,由于已经初始化数组的所有元素,数组元素的数量已经确定,所以,方括号内可以是空的。

Weabu 发表于 2022-5-16 13:48:46

jackz007 发表于 2022-5-16 11:21


好的,谢谢耐心解答

hornwong 发表于 2022-5-16 19:06:39

{:5_106:}

扶风之木 发表于 2022-5-20 15:30:29

第一个是if一直在嵌套,所以只能去验证第一个字幕是不是元音字母,相当于没有循环验证所有字母
页: [1]
查看完整版本: if 和switch