如何使用 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>' and
int32_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
替换 int
s,...) :
#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/B
。 A
和 B
是 int
类型,因此 A/B
将是 int
类型,丢失任何小数部分。然后将这个整数赋值给divide
,它是float类型的,此时整数除法的结果被转换为float。
尝试:divide = (float) A / (float) B
。
关于您的代码的其他几点都很好,也应该得到解决。
我试过用 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>' and
int32_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
替换 int
s,...) :
#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/B
。 A
和 B
是 int
类型,因此 A/B
将是 int
类型,丢失任何小数部分。然后将这个整数赋值给divide
,它是float类型的,此时整数除法的结果被转换为float。
尝试:divide = (float) A / (float) B
。
关于您的代码的其他几点都很好,也应该得到解决。