文章目录
前言
这是我学习C语言过程中的一个小练习,后续应该会对计算器进行功能添加和优化
本文主要介绍编程过程中遇到的问题、原因和解决办法
一、编程过程中遇到的错误
1.第二个scanf函数()不等输入就自动执行
2. 编译时报错函数重定义,不同的基类型
3. switch误拼写成swith
二、错误解析
1.经调试可以看出变量a读入了换行符’\n’,查找资料可知:
在scanf()语句中:
-对于参数%d:会忽略缓冲区开头的空白符(空格、回车、制表符等)(无论有几个);
-对于参数 %c:直接读取缓冲区的第一个字符(无论这个字符是什么);[^1]
故在第一个scanf()语句后使用getchar()来读入’\n’。
2.自定义函数未声明就使用了
将函数放到主函数前,或在include语句和宏定义后加上声明
3.低级拼写错误,还仔细看了好久才发现拼写错了
[^1]此部分参考尘鞅cy的博客
三、代码
代码如下:
#include<stdio.h>
void menu()
{
printf("简易计算器\n");
printf("\n");
}
double calc()
{
double num1, num2;
char a;
while (1)
{
printf("请输入第一个数:\n");
scanf("%lf", &num1);
getchar();//吃掉\n
printf("请输入运算符(+ - * /): \n");
scanf("%c", &a);
printf("请输入第二个数: \n");
scanf("%lf", &num2);
switch (a)
{
case'+':
printf("%lf + %lf = %lf\n", num1, num2, num1 + num2);
break;
case'-':
printf("%lf - %lf = %lf\n", num1, num2, num1 - num2);
break;
case'*':
printf("%lf * %lf = %lf\n", num1, num2, num1 * num2);
break;
case'/':
if (num2 == 0)
{
printf("除数不能为0\n");
}
else
{
printf("%lf / %lf = %lf\n", num1, num2, num1 / num2);
}
break;
default:
break;
}
}
return 0.0;
}
int main()
{
menu();
calc();
return 0;
}
总结
这是我的第一篇博客,希望以后也能够坚持下去!
版权声明:本文为m0_55813643原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。