我正在尝试用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作为num1num2的数据类型,但是结果远不止于使用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/

10-12 13:31