C语言switch语句的一个题目....

来源:百度知道 编辑:UC知道 时间:2024/05/16 01:18:22
#include <stdio.h>
void main()
{ char c; int v0=0,v1=0,v2=0;
do
switch (c=getchar())
{case 'a' : case 'A' :
case 'e' : case 'E' :
case 'i' : case 'I' :
case 'o' : case 'O' :
case 'u' : case 'U' : v1+=1;
default : v0+=1; v2+=1;

}
while(c!='\n');
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
}
最后输出的答案是v0=12,v1=4,v2=12
为什么不是v0=11,v1=4,v2=11啊....哪位大哥能详细分析一下啊
输入的是ADescriptor.一共11个字符.....

程序运行后,你输入的是什么呀?!

******************************************

原因是你使用了do-while而不是while do,所以在11个字母读取完成后会输入一个换行符,这个字符也会参与switch运算,所以会多加一次,switch之后,由于 c=='\n'所以不满足while条件,此时才会退出do-while循环

do
{
}while()
是先执行后判断
你改为while(){ }看看

你拿个简单的用例测试嘛,

直接敲个回车,答案是1,0,1

知道为什么了吧,

一开始进入do ,getchar收入回车,
进入default,v0+=1; v2+=1;

输出就是1.0.1

你的问题类似,加上回车一共12个字符