1

我是 c 编程的新手,我尝试在下面编写这个基本程序,但无论我做什么,它都会跳过第二个 scanf 函数(scanf(“%c”,&sign))。你有解决这个问题的想法吗?另外,我尝试使用 getchar 函数,但也没有用。

SS的错误

#include <stdio.h>

int main()
{
    int num1, num2, mult, sum, subt;
    char sign;

    printf("Enter two numbers: ");
    scanf("%d%d", &num1, &num2);

    printf("\nEnter operator type: ");
    scanf(" %c", &sign);

    if(sign == '*')
        {mult = num1 * num2;
        printf("\nResult is %d\n\n\a", &mult);}

    else if(sign == '+')
        {sum = num1 + num2;
        printf("\nResult is %d\n\n\a", &sum);}

    else if(sign == '-')
        {subt = num1 - num2;
        printf("\nResult is %d\n\n\a", &subt);}

    else
        printf("\nOperator is not valid, program has ended\n\n\a");

system("pause");

return 0;
}
4

2 回答 2

3

问题出在这几行

printf("\nResult is %d\n\n\a", &mult);
printf("\nResult is %d\n\n\a", &sum);
printf("\nResult is %d\n\n\a", &subt);

取下 & 号&。您不想打印变量的内存地址(它们是大的、看似随机的数字),您希望将值存储在变量中。

于 2020-11-08T14:20:05.827 回答
0

问题是没有启用所有警告。

一个良好启用的编译器会警告:

int subt;
printf("\nResult is %d\n\n\a", &subt);}

有类似的东西

warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]

不仅要解决小问题,而且要解决更高级别的问题,这里要学习的最好的东西是使用可用资源来帮助您有效地编写无错误的代码。

使用 gcc,请考虑:

gcc -pedantic -Wall -Wextra -Wconversion ..."
于 2020-11-08T15:11:59.153 回答