我正在尝试用C语言编写一个计算器程序。我认为它已经完成了大部分工作……只是输出不正确。应该输出的输出没有。下面是计算器程序的代码!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void add(double num1,double num2);
void del(double num1,double num2);
void mul(double num1,double num2);
void divide(double num1,double num2);
main(){
FILE *fp;
char sym;
float num1, num2;
int ret;
fp = fopen("input.txt","r");
if(fp==NULL){
exit(1);
}
while(fscanf(fp,"%f%c%f", &num1,&sym,&num2)!=EOF){
switch(sym){
case '+': add(num1,num2);
break;
case '-': del(num1,num2);
break;
case '*': mul(num1,num2);
break;
case '/': divide(num1,num2);
break;
default: printf("%f%c%f", num1,sym,num2);
}
}
fclose(fp);
}
void add(double num1,double num2){
double result;
result = num1+num2;
printf("%f\n", result);
}
void del(double num1,double num2){
double result;
result = num1-num2;
printf("%f\n", result);
}
void mul(double num1,double num2){
double result;
result = num1*num2;
printf("%f\n", result);
}
void divide(double num1,double num2){
double result;
result = num1/num2;
printf("%f\n", result);
}
当我输入以下内容时:
123456789+987654321
123456789-987654321
12345*54321
1349.238912+12384.12871
3918.381631-1287.38272
我应该得到的结果如下:
1111111110.000000
-864197532.000000
670592745.000000
13733.367622
2090.998911
但是这些实际上是我得到的结果:
1111111128.000000
-864197544.000000
670592745.000000
13733.367798
2090.998901
而且我什至不知道为什么其余部分不运行时中间操作会运作良好
我尝试使用float作为
num1
和num2
的数据类型,但是结果远不止于使用double。 最佳答案
为了回答您对我所说的有关简化程序的评论,请考虑以下代码:
请注意,我还对反映原始问题的代码进行了修订。即,您使用的是float
数据类型,该数据类型隐式转换为double
,然后使用float
指定符进行printf()调用。
#include <stdio.h>
#include <stdlib.h>
main(){
FILE *fp;
char sym;
double num1, num2;
fp = fopen("input.txt","r");
if(fp == NULL)
exit(1);
while( fscanf(fp,"%f%c%f", &num1,&sym,&num2) != EOF )
switch(sym){
case '+':
printf("%f\n", num1+num2);
break;
case '-':
printf("%f\n", num1-num2);
break;
case '*':
printf("%f\n", num1*num2);
break;
case '/':
printf("%f\n", num1/num2);
break;
default:
printf("%f%c%f", num1,sym,num2);
}
fclose(fp);
}
注意减小的括号。您只需要为具有多个依赖于此语句的语句添加括号。
如:
if(myVar == 1){
printSomething();
doSomething();
doSomethingElse();
}
但是,如果只需要声明一次,则可以放括号。
if(myVar == 1)
printSomething();
请注意,如果后面只有一个
block
代码,您仍然可以放括号(与上面的代码相同-while循环只有一个切换用例)。关于c - C中的计算器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24108490/