C:switch语句不起作用?

时间:2014-03-09 13:08:51

标签: c switch-statement

好的,所以fgets从文件重定向输入中读取行,然后使用这些行来评估switch语句 我试图测试案例'1'然而它不起作用。
这是我的输出: DATA SET ANALYSIS 1. Show all the data 2. Calculate the average for an experiment 3. Calculate the average across all experiments 4. Quit Selection: 1

有谁理解为什么我的switch语句都没有运行?显然var等于1,因此切换应该至少打印HELLO,但它什么都不做。帮助

while(fgets(str,100,stdin) != NULL && (strcmp(str,"4") && strcmp(str,"4\n")))
    {
        var = atoi(str);
        printf("DATA SET ANALYSIS\n1.\tShow all the data\n2.\tCalculate the average for an experiment\n3.\tCalculate the average across all experiments\n4.\tQuit\nSelection: %d\n",var);
        switch(var)
        {
        case '1' :
            printf("HELLO\n");
            for(j=0;j<i;j++)
            {
                printf("%s",experiments[j]);
                for(k=0;k<10;k++)
                {
                    printf("%d ",data[j][k]);
                }
                printf("\n");
            }
            break;
        }
    }

2 个答案:

答案 0 :(得分:2)

case '1' :

'1'是字符1(ASCII 49),而不是整数1,将其更改为:

case 1 :

请注意,'1'等字符文字在C中的类型为int,因此语法正确,但不是您期望的行为。

答案 1 :(得分:1)

(int) var与ascii'1'进行比较

    var = atoi(str);
    printf("DATA SET ANALYSIS\n1.\tShow all the data\n2.\tCalculate the average for an experiment\n3.\tCalculate the average across all experiments\n4.\tQuit\nSelection: %d\n",var);
    switch(var)
    {
    case '1' :

将您的案例更改为

    case 1:

字符'1'的ascii值为49.执行case '1'时,您实际上正在处理

    case 49: