Switch语句在C中不起作用

Switch语句在C中不起作用,c,switch-statement,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",&a

每当用户键入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;
}
在这个问题上需要您的帮助。

既然选择是字符而不是字符串,那么:

scanf("%s",&choice);
应该是

scanf(" %c",&choice);
注意%c之前的空格-这对于清除输入缓冲区中的任何空白字符非常有用,例如,前一个输入中的换行符

还请注意,如果启用了编译器警告,例如gcc-Wall。。。然后编译器会立即向您指出这个错误。

您的错误是:

char choice;

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

要解决此问题,请使用长度为2的字符串,但要限制!将scanf设置为1个字符!。然后开关必须测试字符串的第一个字符

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

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

%s表示字符串,但选项是字符…请不要将正确答案编辑到问题中。只要点击绿色的勾号,接受帮助您解决问题的答案即可。