如果我们在C中需要整数的switch开关中输入一个字符会发生什么

时间:2015-09-17 17:33:01

标签: c

int main(void)  
{ 

'这是我到目前为止制作的代码'         int select;         做         {             系统(" CLS&#34);             printf(" \ n1] Add Student");             printf(" \ n2]显示学生");             printf(" \ n3)Search Student");             printf(" \ n4]按字母顺序排序");             的printf(" \ N5]退出&#34);             printf(" \ n选择选项:");             的scanf("%d",&安培;选择);

        switch(select)
        {
            case 1: 
            .
            .
            break;
            .
            .
            .
            case 5:
            printf("\nGoodbye!");
            break;

            default:
            printf("\nSelect 1-5");
            break;          
        }   
        getch();
    }while(select != 5);
}

2 个答案:

答案 0 :(得分:2)

首先,<a href="http://empty.com"><span style="text-decoration: none !important;"><font color="f8931c"><i>Text...</i></font></span></a> 不会读取输入流中的任何十进制整数;如果您输入一个非数字字符,则不会从输入流中读取(意味着scanf( "%d", &select);将不会更新,select将返回一个值0)。

其次,scanf与整数值case '1':不匹配,但与字符常量 1(ASCII中的十进制数48)的值不匹配。因此,如果您在提示符下输入'1',则代码将不会使用1分支。

所以,我建议进行以下更改:

case '1':

答案 1 :(得分:0)

由于字符实际上是一类整数类型,因此输入的数字将与交换机情况的ASCII值进行比较。

'1'的情况下,其ASCII值为49,因此如果您输入49,则它将匹配'1'个案。

为了使其按预期工作,案例必须更改为数字而不是代表数字的字符,即case 1:而不是case '1':