我试过在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);
}
答案 0 :(得分:3)
在fun1
divide = A/B
您有A
。 B
和int
的类型为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);
}