Switch语句在C中不起作用

时间:2014-10-14 21:53:25

标签: c switch-statement

每当用户键入2个整数并从+, - ,*,/中选择任何内容时,程序运行switch语句。问题是switch语句使第一个整数为0并根据该结果给出结果。

假设2个整数分别为4和8.用户选择+。程序给出的结果为0 + 8 = 8.其他选项同样如此。

以下是代码:

#include <stdio.h>

int main() {
    int x,y;
    char choice;

    printf("Enter the first Integer:\n");
    scanf("%d",&x);
    printf("Enter the second Integer:\n");
    scanf("%d",&y);

    printf("Choose the action you want to perform\n")
    scanf("%s",&choice);
    switch(choice) {
        case '+':
            printf("\n%d + %d = %d",x,y,x+y);
            break;

        case '-':
            printf("\n%d - %d = %d",x,y,x-y);
            break;

        case '*':
            printf("\n%d * %d = %d",x,y,x*y);
            break;  

        case '/':
            if(y==0) {
                printf("Undefined value\n");
            } else {
                printf("\n%d / %d = %d",x,y,x/y);
            }  
            break;

        default:
            printf("\n Enter something valid\n");
            break; 
    }

    return 0;
}

在这个问题上需要你的帮助。

2 个答案:

答案 0 :(得分:6)

由于choicechar(不是字符串),所以:

scanf("%s",&choice);

应该是

scanf(" %c",&choice);

注意%c之前的空格 - 这对于从输入缓冲区中清除任何空格字符很有用,例如:来自上一个输入的换行符。

另请注意,如果您已启用编译器警告(例如gcc -Wall ...),则编译器会立即向您指出此错误。

答案 1 :(得分:0)

你的错误是这样的:

char choice;

scanf("%s",&choice);

%s引用字符串,但您只提供指向字符的指针。这会导致堆栈中的变量(特殊&#34; y&#34;)被字符串的其余部分覆盖。如果您只输入一个字符,则第一个字符存储在&#39; choice&#39;零终止字节覆盖变量的某些部分&#34; y&#34; (在堆栈旁边)。

要解决此问题,请使用长度为2的字符串,但将scanf限制为(!)为1个字符!然后,交换机必须测试字符串的第一个字符......

char choice[2];
[...]
scanf("%s",&choice);

switch(choice[0]) {
[...]