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

如何使用C中的函数制作简单的计算器?,c,calculator,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,

我试过用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);
}
#包括
#包括
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;
查尔j;
scanf(“%d%c%d”,&i,&j,&k);
开关(j)
{
案例“/”:
fun1&i&k);
打破
案例“*”:
fun2(i&k);
打破
格“+”:
fun3(i&k);
打破
案例'-':
fun4(&i和&k);
打破
违约:
printf(“错误”);
}
getch();
返回0;
}
fun1(int*a,int*b)
{
浮动分割;
浮动A=*A,B=*B;
如果(A%B==0)
{
除法=A/B;
printf(“=%.0f”,除以);
}
其他的
{
除法=A/B;
printf(“=%.2f”,除以);
}
}
fun2(int*c,int*d)
{
整数乘,C=*C,D=*D;
乘=C*D;
printf(“=%d”,乘法);
}
fun3(int*e,int*f)
{
加上整数,E=*E,F=*F;
加法=E+F;
printf(“=%d”,添加);
}
fun4(整数*g,整数*h)
{
整数减法;
int G=*G,H=*H;
减法=G-H;
printf(“=%d”,减法);
}

您需要更改函数返回到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);

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

if (scanf("%d%c%d", &i, &j, &k) != 3){
    printf("incorrect input\n");
    return 1; //err
}
并检查是否存在除零和浮点感知。
2.为函数使用好的名称:添加子…
3.不需要指针时不要传递它。
4.使用
\include'和
int32\u t'或'int64\u 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;
}
#包括
#包括
int main()
{
int32_t i,k;
查尔j;
如果(scanf(“%d%c%d”、&i、&j和&k)!=3){
printf(“不正确的输入\n”);
返回1;//错误
}
开关(j)
{
案例“/”:
if(k==0)printf(“除以0\n”);else printf(“%.2f\n”,i/(float)k);
打破
案例“*”:
printf(“%d\n”,i*k);
打破
格“+”:
printf(“%d\n”,i+k);
打破
案例'-':
printf(“%d\n”,i-k);
打破
违约:
printf(“不正确的输入\n”);
}
返回0;
}

我希望这会有所帮助。

您大致希望这样,但仍有很大的改进余地(例如:除a、b、c、i、j、k之外的变量名,fun1、fun2以外的函数名,等等,函数返回值而不是打印结果,错误检查,用
float
替换
int
s,…):

#包括
#包括
无效fun1(内部a、内部b);
void fun2(int c,int d);
void fun3(int e,int f);
void fun4(int g,int h);
int main()
{
int i,k;
查尔j;
scanf(“%d%c%d”,&i,&j,&k);
开关(j)
{
案例“/”:
fun1(i,k);
打破
案例“*”:
fun2(i,k);
打破
格“+”:
fun3(i,k);
打破
案例'-':
fun4(i,k);
打破
违约:
printf(“错误”);
打破
}
getch();
返回0;
}
无效fun1(内部a、内部b)
{
printf(“%d”,a/b);
}
无效fun2(内部c、内部d)
{
printf(“%d”,c*d);
}
无效fun3(整数e,整数f)
{
printf(“%d”,e-f);
}
无效fun4(整数g,整数h)
{
printf(“%d”,g-h);
}

fun1
中,您拥有
divide=A/B
<代码>A
B
属于
int
类型,因此
A/B
属于
int
类型,没有任何小数部分。然后将该整数分配给类型为float的
divide
,此时,除法的整数结果将转换为float

尝试:
divide=(float)A/(float)B


关于代码的其他观点都是好的,也应该得到解决

你犯了什么错误?“但它不起作用”-请原谅显而易见的错误,但如果它起作用,你就不会在这里。它在做什么,这和你期望的有什么不同?“我希望它能工作,但它不能”在这里不是一个选项。相关:
divide=A/B执行整数除法,然后将结果保存为
浮点值。我可以自信地说,这不太可能是你想要的。为什么要按地址传递这些参数仍然是个谜。为了能够使用浮点数,你可能想用浮点数替换所有的
int
s或
double
s。这甚至不应该编译,
fun1(int*a,int*b)
未声明返回类型的C是无效的。您需要一个现代化的编译器,或者学习如何配置当前的编译器。@SouravGhosh因此,如果您没有正确编写它们,主函数将不知道它们,并且无法使用它们!
#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);
}