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

How to make simple calculator using Functions in C?

我试过用 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);
}

您需要将函数 return 的值更改为 void,因为它们没有 return 任何东西。

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. 为功能使用好名字:Add Sub ...
3. 不需要的时候不要传递指针。
4. 使用 #include<stdint.h>' andint32_t` 或 'int64_t' ... 当您不需要依赖于平台的类型时。
5.不要在不需要的时候使用return类型的函数。

如果你的代码只是像你的示例一样打印,你可以这样写:

#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;
}

希望对您有所帮助。

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

#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);
}

fun1 中你有 divide = A/BABint 类型,因此 A/B 将是 int 类型,丢失任何小数部分。然后将这个整数赋值给divide,它是float类型的,此时整数除法的结果被转换为float。

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

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