求助一道c语言简单题

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:41:10
13.若运行以下程序时,从键盘输入ADescriptor<CR>(<CR>表示回车),则下面程序的运行结果是( )
#include <stdio.h>
main()
{ char c;
int v0=1,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);
}
A.v0=7,v1=4,v2=7 B.v0=8,v1=4,v2=8
C.v0=11,v1=4,v2=11 D.v0=13,v1=4,v2=12
输入回车键不是应该不满足while后的条件,应该执行一次do吧?不明白为什么。

DO是 一直 执行的 , getchaer()一次只拾取一个字符,和DO 一起使用 可以对一段字符逐渐使用

char c;ADescriptor是一个字符一个字符的提交进去的,而不是一次性提交字符串

答案为D
输入回车时要做一次do然后跳出循环。这样这一串ADescriptor<CR>为12个字符,case里没有break,所以排在最后的default对于每个字符都会执行,v0和v2最后就是13和12,而case 'U'里的内容要看它或它之前的case是否执行,A e i o四个执行,所以v1加了四次值为4

while(c!=′\n′) 表示当遇到回车时停止输入字符,前面的ADescriptor都要被执行
v0=13,v1=4,v2=12