c - C中的循环计算器
问题描述
我只是在做一个简单的计算器,想知道当输入无效的运算符/浮点数时,如何让我的计算器循环回到开头;要求用户再次输入所有内容。基本上重新启动它。
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main()
{
double num1;
double num2;
char op;
printf("Input a number: ");
scanf("%lf", &num1);
printf("Enter operator (+,-,*,/,^): ");
scanf(" %c", &op);
printf("Enter the second number: ");
scanf(" %lf", &num2);
if (op == '+')
{
printf("%f", num1 + num2);
}
else if (op == '-')
{
printf("%f", num1 - num2);
}
else if (op == '/')
{
printf("%f", num1 / num2);
}
else if (op == '*')
{
printf("%f", num1 * num2);
}
else if (op == '^')
{
printf("%f", pow(num1,num2));
}
else
{
printf("Invalid operator entered");
}
return 0;
}
解决方案
我会用另一种方法来避免\n
scanf 问题
#define MAXNUMSTR 100
int calc(void)
{
char line[MAXNUMSTR];
double num1;
double num2;
double res;
do
{
printf("\nInput first number: ");
if(!fgets(line, MAXNUMSTR -1, stdin)) return 0;
}while(sscanf(line, "%lf", &num1) != 1);
do
{
printf("\nInput second number: ");
if(!fgets(line, MAXNUMSTR -1, stdin)) return 0;
}while(sscanf(line, "%lf", &num2) != 1);
printf("\nEnter operator (+,-,*,/,^, x): ");
if(!fgets(line, MAXNUMSTR -1, stdin)) return 0;
switch(line[0])
{
case '+':
res = num1 + num2;
break;
case '-':
res = num1 - num2;
break;
case '*':
res = num1 * num2;
break;
case '/':
if(num2 == 0.0)
{
printf("\nDivision by zero\n");
return 1;
}
res = num1 / num2;
break;
case '^':
res = pow(num1, num2);
break;
case 'x':
return 0;
default:
printf("\nInvalid operation\n");
return 1;
}
printf("\n%f %c %f = %f\n", num1, num2, res);
return 1;
}
int main(void)
{
while(calc());
return 0;
}
推荐阅读
- python - 为 PythonTeX 文档设置随机种子
- jasper-reports - 如何在条形图范围轴上显示单位
- c++ - 理解这行 C++ 指针代码
- wso2 - EI 6.6.0 中的 apache axiom soap 客户端类调解器
- android - 为 Pixel 3XL (b1c1_defconfig) 编译最新的 Android 10 内核时出错 - 错误:LLVMgold.so:无法加载插件库
- css - @use 和 @forward 的 sass 编译问题
- python-3.x - 如何在while循环中评估函数
- r - 在列表中追加两个连续的项目
- javascript - Symfony 5 + Webpack Encore + Bootstrap Table 未导出
- google-apps-script - Google表格/脚本中的清除格式将行移动到其他表格