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: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 Weabu 发表于 2022-5-14 18:06
#include
int main()
你帖子第一个代码使用的是 if-else 分支,而 break 是退出最近一层 循环 或 switch 条件分支
因为你第一个代码,只有 while 循环,那么自然 break 退出是此循环,导致只执行一次循环就退出
你第二个代码使用 switch 分支,break 在里面的作用就是退出此 switch 分支结构,所以第二个代码不会直接退出 while 循环结构
#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: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:22 编辑
int d = {0}// 定义 d 为含有 5 个元素的一维整型数组,并将 d 的所有 5 个元素初始化为 0 值。
char a[] = {'a' , 'e' , 'i' , 'o' , 'u'}// 定义 a 为含有 5 个元素的一维字符数组,并分别用 'a'、'e'、'i'、'o'、'u' 进行初始化,由于已经初始化数组的所有元素,数组元素的数量已经确定,所以,方括号内可以是空的。 jackz007 发表于 2022-5-16 11:21
好的,谢谢耐心解答 {:5_106:} 第一个是if一直在嵌套,所以只能去验证第一个字幕是不是元音字母,相当于没有循环验证所有字母
页:
[1]