问题描述
- c语言简易计算器小白问题
-
#include
float fun1(float a,float b)
{
float c;
c=a+b;
return c;
}
float fun2(float a,float b)
{
float c;
c=a-b;
return c;
}
float fun3(float a,float b)
{
float c;
c=a*b;
return c;
}
float fun4(float a,float b)
{
float c;
c=a/b;
return c;
}
int main()
{
int d;
float a,b;
printf("tt|--------------------|n");
printf("tt| 简易计算器 |n");
printf("tt|--------------------|n");
printf("tt| 1-加法 |n");
printf("tt| 2-减法 |n");
printf("tt| 3-乘法 |n");
printf("tt| 4-除法 |n");
printf("tt| 0-退出 |n");
printf("tt|--------------------|n");
printf("选择需要的计算:n");
scanf("%d",&d);
while(d<=5&&d>0)
{
printf("输入两个数字:n");
scanf("%f,%f"&a,&b);
switch(d)
{
case 1:
printf("%.2f",fun1(a,b));
break;
case 2:
printf("%.2f",fun2(a,b));
break;
case 3:
printf("%.2f",fun3(a,b));
break;
case 4:
printf("%.2f",fun4(a,b));
break;
case 0:
printf("谢谢使用~~");
break;
}
}
printf("n谢谢使用~~");
return 0;
}显示输入那个位置有问题。新手求指导。我自己感觉结构有问题
解决方案
你是想实现循环运算还是一次运算就结束?
1.如果一次运算就结束的话:把主函数里的While 改成用if判断! 并且在每个scanf()函数后面各加一个 getchar();
2.如果是循环运算的话 把选择运算符号的事情放到while里面 while的条件写成1 就ok 然后 用if判断输入的d是否是1 。2。3。4,同样 scanf()后面跟上getchar();
getchar()会把你每次输入完按的那个enter键给接受掉!
解决方案二:
用tab而不是空格对齐
printf("tt|t1-加法t|n");
这样
解决方案三:
程序有些可以改进的地方,顺便说下,完全没必要1 2 3 4,直接让用户输入+ - * / 用switch判断下就可以了。
float fun1(float a,float b)
{
float c;
c=a+b;
return c;
}
直接写
float fun1(float a,float b)
{
return a + b;
}
解决方案四:
while(d<=5&&d>0)
{
printf("输入两个数字:n");
scanf("%f,%f"&a,&b); //这一句少了一个逗号:scanf("%f,%f",&a,&b);
switch(d)
....
....
}
其次,运行的时候,输入的两个数要用逗号隔开,因为你scanf括号里的形式的:%f,%f而不是%f%f
解决方案五:
这样的计算器对于小白来说,挺好的,练练常用的语句和自定义函数,坚持学习,然后改进。
解决方案六:
嗯嗯,加油。。。。。。。。。。。。。。。。
解决方案七:
为使用方便,建议这样:
int main()
{
char buf[LEN] = {0};
while(buf[0] != 'q')
{
printf("请输入:");
scanf("%s",buf); //一次输入“a + b”类似这样的值
//按个查找buf数组,找到"+-*/"就截断,如使用atof函数实现,把前面的转换成数值赋给a,后面的转换成数值赋给b,运算符号也保存起来
//然后
switch()
{
case '+':printf("......%fn",fun1(a,b));break;
case '-':printf("......%fn",fun2(a,b));break;
//....
}
}
return 0;
}