我需要在C中编写一个简单的程序,它可以简单地计算:+, - ,*,/
现在,我正在使用Visual Studio Express 2013,这里是代码:
#include <stdio.h>
#include <stdlib.h>
int main(){
double a, b;
double sum = 0;
char o; //operator
printf("Enter operator\n");
scanf_s("%c", &o);
printf("Enter first operand\n");
scanf_s("%f", &a);
printf("Enter second operand\n");
scanf_s("%f", &b);
if (o == '+'){
sum = a + b;
printf("The result is", &sum);
}
if (o == '-'){
sum = a - b;
printf("The result is", sum);
}
if (o == '*'){
sum = a*b;
printf("The result is", sum);
}
if (o == '/'){
if (b == !0){
sum = a / b;
printf("The result is", sum);
}
else printf("Error");
}
getchar();
}
我的输出:输入运算符 + 输入第一个操作数 3.5 输入第二个操作数 5.4
输入第二个数字后,程序退出,什么都没有! 没有编译错误,我不知道该怎么做。有人可以帮忙吗?
答案 0 :(得分:1)
您未正确使用printf
。这就是你正在使用的。
printf("The result is", &sum);
您未在格式字符串中指定输出类型,并且您要传递要打印的变量的地址,而不是值。
您应该使用:
printf("The result is %lf\n", sum);
%lf
指定您要打印double
,\n
添加换行符,并传递变量sum
的值,而不是&#39;的地址。
另外,您应该将if (b == !0){
更改为if (b != 0){
。如果你保留你所放的东西,那就相当于if (b == 1){
,这可能不是你想要的。
编辑以下是我的修改后的代码,它可以提供正确的结果。我将指出我更改了哪些行
#include <stdio.h>
#include <stdlib.h>
int main(){
double a, b;
double sum = 0;
char o; //operator
/* I had to use scanf, since I'm not using MS/Visual Studio, but GCC */
printf("Enter operator\n");
scanf("%c", &o);
printf("Enter first operand\n");
scanf("%lf", &a); /* changed %f to %lf */
printf("Enter second operand\n");
scanf("%lf", &b); /* changed %f to %lf */
/* I prefer to use if ... else if ..., this is personal preference */
if (o == '+'){
sum = a + b;
printf("The result is %lf\n", sum); /* Changed, see original post */
} else if (o == '-'){
sum = a - b;
printf("The result is %lf\n", sum); /* Changed, see original post */
} else if (o == '*'){
sum = a*b;
printf("The result is %lf\n", sum); /* Changed, see original post */
} else if (o == '/'){
if (b != 0){
sum = a / b;
printf("The result is %lf\n", sum); /* Changed, see original post */
}
else printf("Error");
}
getchar();
return 0;
}
答案 1 :(得分:0)
%f
格式来阅读双打。您应该使用%lf
:
scanf_s("%lf", &a);
printf("The result is %e", sum);
if (b == !0)
更改为if (b != 0)
答案 2 :(得分:-1)
现在一切正常,我对其进行了一些更改
问题出在您的“ scanf_s”和“%f”上
+refs/tags/*:refs/remotes/origin/tags/*