每当用户键入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;
}
在这个问题上需要你的帮助。
答案 0 :(得分:6)
由于choice
是char
(不是字符串),所以:
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]) {
[...]