Switch语句在C中不起作用
每当用户键入2个整数并从+,-,*,/,中选择任何内容时,程序都会运行switch语句。问题是switch语句将第一个整数设为0,并根据该值给出结果 假设2个整数是4和8。用户选择+。程序给出这样的结果0+8=8。其他选项也一样 代码如下: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
#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表示字符串,但选项是字符…请不要将正确答案编辑到问题中。只要点击绿色的勾号,接受帮助您解决问题的答案即可。