我刚刚开始学习C,但是我已经遇到了问题。我想写一个简单的计算器,但是-我不知道为什么-第二个整数总是算作0。我只是无法找出问题所在。
这是我的代码:
int main(){
int a, b;
char c;
printf("Enter 2 numbers:\n");
scanf("%d %d", &a, &b);
printf("Enter an operator:\n");
scanf("%s", &c);
switch(c){
case '+':
printf("%d\n", a+b);
break;
case '-':
printf("%d\n", a-b);
break;
case '*':
printf("%d\n", a*b);
break;
case '/':
printf("%d\n", a/b);
break;
}
}
感谢您的帮助:)
您正在将字符串读取为单个字符:%s
将读取,例如+
和\n
转换为c
,从而覆盖了堆栈。
您正在使用%s
读取char
。那是不确定的行为。您需要使用正确的格式说明符来避免这种情况。在这种情况下为%c
。另外,要跳过在扫描数字后在输入中找到的换行符/返回值,请预先使用空格,即" %c"
。
您可以使用scanf("%d%d", &a, &b)
之间没有空格。请注意,输入必须在数字之间包含空格(否则12 3
与1 23
是无法区分的)。另外,您应该注意%s
设计为可用于字符串,并且为not safe。尝试使用scanf(" %c", &c)
处理单个字符,而不是字符串(还请注意百分比之前的空格,该空格将运算符前的所有空格都吞没了。)