c++中switch用法求解分析?

从键盘输入The Programming#后执行程序。
#include<iostream.h>
void main(void)
{ int v1=0,v2=0;char ch;
cin.get(ch);
while(ch!='#')
{ switch(ch)
{ case 'a':case 'A':
case 'e':case 'E':
case 'o':case 'O':
default: v1++;
case 'i':case 'I':
case 'u':case 'U': v2++;
}
cin.get(ch);
}
cout<<v1<<','<<v2<<endl;
}

你目前这个程序:
如果键盘输入 a,A,e,E,o,O 数值变量 v1 v2 都会被累加
如果键盘输入 i,I,u,U 数值变量只有 v2会累加

问题主要出在缺少 break; 语句
switch() 中的 case 都是条件,符合条件的语句会被执行,全部不符合条件则会执行default后面的语句,但你这个程序中default后面没有 break,所以 后面的两个case 条件都会被执行,导致 v2累加追问

原题答案为v1=14,v2=15;怎么做到的???

追答

输入任何字符 v2 都会累加
v1的值等于你输入字符里面去掉包含 i,I,u,U 的字符数量
例如:
输入:nn#
输出:2,2
输入:aeoiu#
输出:3,5
输入:iiii#
输出:0,4

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-05
你需要在你处理了一个分支后break;否则其下的代码会继续执行,出现逻辑错误,改为下面这样
switch(ch)
{ case 'a':case 'A':
case 'e':case 'E':
case 'o':case 'O':
default: v1++;break;
case 'i':case 'I':
case 'u':case 'U': v2++;break;
}
default是所有分支都不符合才执行,所以如果你想实现输入a,e,o后v1++就应该把default放到最后,如果没什么事就只写一个break;如:
switch(ch)
{ case 'a':case 'A':
case 'e':case 'E':
case 'o':case 'O':
v1++;break;
case 'i':case 'I':
case 'u':case 'U': v2++;break;
default:break;
}
这样就相当于
if(ch == 'a' || ch =='A' || ch =='e' || ch =='E' || ch =='o' || ch=='O')
{
v1++;
}
else if(ch =='i' || ch=='I' || ch=='u' || ch=='U')
{
v2++;
}
else
{
}追问

原题答案为v1=14,v2=15;怎么做到的???

追答

随便输入a,e,o,A,E,O累计14个,随便输入i,u,I,U累计15个,最后输入个#就可以啦

追问

能详细点吗

追答

输入aaaaaaaaaaaaaa,任意a都可以替换为e,o,A,E,O。
输入uuuuuuuuuuuuuuu,任意u都可以替换为i,I,U。
这样就会输出14和15了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网