c语言switch中分号(;)和冒号(:)

今天看c primer plus,看到这样一个程序
// vowels.c -- uses multiple labels
#include
int main(void)
{
char ch;
int a_ct, e_ct, i_ct, o_ct, u_ct;

a_ct = e_ct = i_ct = o_ct = u_ct = 0;

printf("Enter some text; enter # to quit.\n");
while ((ch = getchar()) != '#')
{
    switch (ch)
    {
        case 'a' :
        case 'A' :  a_ct++;
            break;
        case 'e' :
        case 'E' :  e_ct++;
            break;
        case 'i' :
        case 'I' :  i_ct++;
            break;
        case 'o' :
        case 'O' :  o_ct++;
            break;
        case 'u' :
        case 'U' :  u_ct++;
            break;
        default :   break;
    }                    // end of switch
}                        // while loop end
printf("number of vowels:   A    E    I    O    U\n");
printf("                 %4d %4d %4d %4d %4d\n",
       a_ct, e_ct, i_ct, o_ct, u_ct);

return 0;

}
我照着这个输入进visual studio2015community,无法运行,提示我把所有case中的第二个标签的(:)全改成(;)
也就是把
switch (ch)
{
case 'a' :
case 'A' : a_ct++;
break;
case 'e' :
case 'E' : e_ct++;
break;
case 'i' :
case 'I' : i_ct++;
break;
case 'o' :
case 'O' : o_ct++;
break;
case 'u' :
case 'U' : u_ct++;
改成
switch (ch)
{
case'a':
'A'; a_ct++;
break;
case'e':
'E'; e_ct++;
break;
case'i':
'I'; i_ct++;
break;
case'o':
'O'; o_ct++;
break;
case'u':
'U'; u_ct++;
break;
改了之后就可以完美编译调试,
我找到书上的源代码(也就是这个问题最上面那段代码),编译完美通过了,但是调试就出现这个
图片说明
难道是书上印错了吗,还是visual studio的问题?

你这样改完应该是不能“完美”调试的,输入大写字母时应该得不到正确结果吧
可以试试改成这样

 witch (ch)
    {
        case 'a' :
                        a_ct ++;
                        break;
        case 'A' :  
                        a_ct++;
            break;

                        下略

逗号是语句,而冒号是关键字只能跟在case关键字后面,表示一个分支。

可能是visual studio导致的,我用CodeBlocks运行书上的代码结果如下:
图片说明

switch(ch)
{
case 'a':
case 'A':
{
n ++;
}
break;
}

书写规范 了怎么样都不错。。。

找了这么多天终于知道了,特么的冒号分英文冒号和中文冒号,程序中要用英文冒号。。。。。