我刚开始学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将读取,f.ex.+\n读入c从而覆盖堆栈。
您还应该检查scanf()的返回值是否有错误,即如果用户输入了不正确的数据并且解析器失败。
通过这些更改,代码的工作方式如下所述:

#include <stdlib.h>
#include <stdio.h>

int main(void) {
    int a, b;
    char c[20];
    int result;

    printf("Enter 2 numbers:\n");
    result = scanf("%d %d", &a, &b);
    if (result != 2) {
        perror("integer input failed");
        return(1);
    }
    printf("Enter an operator:\n");
    result = scanf("%s", c);
    if (result != 1) {
        perror("character input failed");
        return(1);
    }

    /* just showing that everything was recognized correctly... */
    printf("'%d' '%d' '%s'\n", a, b, c);

    switch(c[0]){
    ...

示例运行:
$ gcc -Wall -Werror -o dummy dummy.c
$ ./dummy
Enter 2 numbers:
1 2
Enter an operator:
+
'1' '2' '+'
3
$

09-17 05:24