第二整数计为0

问题描述 投票:0回答:3

我刚刚开始学习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;
    }
}

感谢您的帮助:)

c switch-statement calculator
3个回答
1
投票

您正在将字符串读取为单个字符:%s将读取,例如+\n转换为c,从而覆盖了堆栈。


0
投票

您正在使用%s读取char。那是不确定的行为。您需要使用正确的格式说明符来避免这种情况。在这种情况下为%c。另外,要跳过在扫描数字后在输入中找到的换行符/返回值,请预先使用空格,即" %c"


0
投票

您可以使用scanf("%d%d", &a, &b)之间没有空格。请注意,输入必须在数字之间包含空格(否则12 31 23是无法区分的)。另外,您应该注意%s设计为可用于字符串,并且为not safe。尝试使用scanf(" %c", &c)处理单个字符,而不是字符串(还请注意百分比之前的空格,该空格将运算符前的所有空格都吞没了。)

© www.soinside.com 2019 - 2024. All rights reserved.