如何使用C中的函数制作简单的计算器?

时间:2016-06-23 08:15:29

标签: c calculator

我试过在C中制作简单的计算器。 但它没有用,任何人都可以告诉我解决方案的问题。 我是编程新手,所以请原谅任何愚蠢的错误。      有没有参数的问题,因为我已经采取3输入但在功能参数我只使用2。 分割功能效果不佳。

#include<stdio.h>
#include<conio.h>
int fun1(int *a,int *b);
int fun2(int *c,int *d);
int fun3(int *e,int *f);
int fun4(int *g,int *h);
int main()
{
    int i,k;
    char j;
    scanf("%d%c%d",&i,&j,&k);
    switch(j)
    {
        case '/':
            fun1(&i,&k);
            break ;
        case '*':
            fun2(&i,&k);
            break ;
        case '+':
            fun3(&i,&k);
            break ;
        case '-':
            fun4(&i,&k);
            break ; 
        default:
            printf("ERROR");
    }
    getch();
    return 0;   
}
fun1(int *a,int *b)
{
    float divide;
    float A=*a,B=*b;
    if(A%B==0)
    {
        divide=A/B;
        printf("= %.0f",divide);
    }
    else
    {
        divide=A/B;
        printf("= %.2f",divide);
    }
}
fun2(int *c,int *d)
{
    int multiply,C=*c,D=*d;
    multiply=C*D;
    printf("= %d",multiply);
}
fun3(int *e,int *f)
{
    int add,E=*e,F=*f;
    add=E+F;
    printf("= %d",add);
}
fun4(int *g,int *h)
{
    int subtract;
    int G=*g,H=*h;
    subtract=G-H;
    printf("= %d",subtract);
}

4 个答案:

答案 0 :(得分:3)

fun1 divide = A/B您有ABint的类型为A/B,因此int的类型为divide,会丢失任何小数部分。然后将此整数分配给divide = (float) A / (float) B,其类型为float,此时,除法的整数结果将转换为浮点数。

请尝试:width

关于您的代码的其他要点都很好,也应该解决。

答案 1 :(得分:0)

您需要更改函数返回 void 的值,因为它们不会返回任何内容。

void fun1(int *a,int *b);
void fun2(int *c,int *d);
void fun3(int *e,int *f);
void fun4(int *g,int *h);

答案 2 :(得分:0)

您的代码正在运行,但需要进行一些错误检查:
1.检查输入是否正确:

if (scanf("%d%c%d", &i, &j, &k) != 3){
    printf("incorrect input\n");
    return 1; //err
}

并检查除以零和浮点精度 2.使用好名称作为功能:添加子...
3.不需要时不要传递指针。
4.当您不需要平台相关类型时,请使用#include<stdint.h>' and int32_t`或'int64_t'.... 5.不需要时不要使用函数返回类型。

如果您的代码只是像样本一样打印,您可以这样写:

#include<stdint.h>
#include<stdio.h>
int main()
{
    int32_t i, k;
    char j;
    if (scanf("%d%c%d", &i, &j, &k) != 3){
        printf("incorrect input\n");
        return 1; //err
    }
    switch (j)
    {
    case '/':
        if (k == 0)printf("Divide by 0\n");else printf("%.2f\n", i / (float)k);
        break;
    case '*':
        printf("%d\n", i*k);
        break;
    case '+':
        printf("%d\n", i + k);
        break;
    case '-':
        printf("%d\n", i - k);
        break;
    default:
        printf("incorrect input\n");
    }
    return 0;
}

我希望这会有所帮助。

答案 3 :(得分:0)

你大致想要这个,但仍有很大的改进空间(例如:除了a,b,c,i,j,k之外的变量名,除了fun1,fun2等之外的函数名,函数返回值而不是打印结果,错误检查,将int替换为float,...):

#include <stdio.h>
#include <conio.h>

void fun1(int a, int b);
void fun2(int c, int d);
void fun3(int e, int f);
void fun4(int g, int h);

int main()
{
    int i,k;
    char j;
    scanf("%d%c%d",&i ,&j, &k);

    switch(j)
    {
        case '/':
            fun1(i, k);
            break ;
        case '*':
            fun2(i, k);
            break ;
        case '+':
            fun3(i, k);
            break ;
        case '-':
            fun4(i, k);
            break ; 
        default:
            printf("ERROR");
            break;
    }

    getch();
    return 0;   
}

void fun1(int a, int b)
{
    printf("%d",a / b);
}

void fun2(int c,int d)
{
    printf("%d",c * d);
}

void fun3(int e, int f)
{
    printf("%d",e-f);
}

void fun4(int g,int h)
{
    printf("%d",g-h);
}