Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言编写的基本计算器只能进行加法运算_C_Calculator - Fatal编程技术网

用C语言编写的基本计算器只能进行加法运算

用C语言编写的基本计算器只能进行加法运算,c,calculator,C,Calculator,我试着做一个基本的计算器,但每当我输入时,它就会加起来,而不是听操作员输入 我知道我的if和if-else语句不起作用,但我真的不明白为什么。当我编译时没有错误,我尝试过的每一种方法都会导致许多错误 代码如下: #include <stdio.h> int main(void) { double num1; double num2; double x; double operator; printf("First number:\n"); scanf("%lf\n", &

我试着做一个基本的计算器,但每当我输入时,它就会加起来,而不是听操作员输入

我知道我的if和if-else语句不起作用,但我真的不明白为什么。当我编译时没有错误,我尝试过的每一种方法都会导致许多错误

代码如下:

#include <stdio.h>

int main(void) {
double num1;
double num2;
double x;
double operator;

printf("First number:\n");
scanf("%lf\n", &num1);

printf("Second number:\n");
scanf("%lf\n", &num2);

printf("Select operator:\n Division\n Multiplication\n Subtraction\n Addition\n");
scanf("%lf\n", &operator);

if (operator == '/' ) {
    x=num1/num2;
}
else if (operator == '*') {
    x=num1*num2;
}
else if (operator == '-') {
    x=num1 - num2;
}
else {
    x=num1 + num2;
}

printf("Result: %lf\n", x);

return 0;
}
#包括
内部主(空){
双num1;
双num2;
双x;
双算子;
printf(“第一个数字:\n”);
scanf(“%lf\n”、&num1);
printf(“第二个号码:\n”);
scanf(“%lf\n”、&num2);
printf(“选择运算符:\n除法\n乘法\n减法\n加法\n”);
scanf(“%lf\n”、&operator);
if(运算符=='/')){
x=num1/num2;
}
else if(运算符=='*'){
x=num1*num2;
}
else if(运算符=='-'){
x=num1-num2;
}
否则{
x=num1+num2;
}
printf(“结果:%lf\n”,x);
返回0;
}

干杯

首先,我要避免调用变量“operator”(这是C++中的一个关键字)。 这是您的变量:

双运算符;
在这里,您将其理解为双精度浮点数:

scanf(“%lf\n”、&operator);
现在您希望将其视为一个字符:

if(运算符=='-')
要解决此问题,请将运算符类型更改为char:

char算子;
并将其作为字符读取:

scanf(“%c\n”、&operator);

首先,我要避免调用变量“operator”(这是C++中的一个关键字)。 这是您的变量:

双运算符;
在这里,您将其理解为双精度浮点数:

scanf(“%lf\n”、&operator);
现在您希望将其视为一个字符:

if(运算符=='-')
要解决此问题,请将运算符类型更改为char:

char算子;
并将其作为字符读取:

scanf(“%c\n”、&operator);

发布的代码总是附加结果,因为所有比较(“/”、“-”、“*”)都不会与
双精度进行比较
发布的代码总是附加结果,因为所有比较(“/”、“-”、“*”)都不会与
双精度进行比较
谢谢!我不敢相信事情竟那么简单。还有一个问题,==是否只比较字符?或者“”指定了字符?将其更改为
scanf(“%c”,&operator)
@GradyWhite
==
,可以用于比较任何类型。引号生成一个<代码> char 常量,并且应该与另一个<代码> char < />进行比较。没有特别的理由避免使用<代码>运算符< /C>作为标识符,除非有一个现实的前景,即您的代码将被编译为C++。这个程序,如果用惯用的C++编写,将会非常不同。在所有<代码> SCANFF()/CUT>中,尾随<代码> \\n代码>应该被删除,否则代码> SCANFF()/CUT>块,直到下一个非空白空间输入。谢谢!我不敢相信事情竟那么简单。还有一个问题,==是否只比较字符?或者“”指定了字符?将其更改为
scanf(“%c”,&operator)
@GradyWhite
==
,可以用于比较任何类型。引号生成一个<代码> char 常量,并且应该与另一个<代码> char < />进行比较。没有特别的理由避免使用<代码>运算符< /C>作为标识符,除非有一个现实的前景,即您的代码将被编译为C++。这个程序,如果用惯用的C++编写的话,将会非常不同。在所有的代码> SCANFE()中,尾随<代码> >代码> <代码>应该被删除,否则代码> SCANFF()/Cube >块,直到下一个非空白空间输入。“添加而不是听我的操作符输入”。“语句不起作用”> >这有助于为您的特定情况提供答案。关于:
scanf(“%lf\n”,&operator)这试图读取一个
双精度
,但“运算符”是一个字符。建议:
scanf(“%c\n”、&operator)并将变量
运算符
声明为
字符
,而不是
双精度
“添加而不是侦听我的运算符输入。”和“语句不起作用”-->发布使用的确切输入和看到的输出。这有助于为您的特定情况提供答案。关于:
scanf(“%lf\n”,&operator)这试图读取一个
双精度
,但“运算符”是一个字符。建议:
scanf(“%c\n”、&operator)并将变量
运算符
声明为
字符
,而不是
双精度