为了账号安全,请及时绑定邮箱和手机立即绑定

如下代码,例输入:5+6回车,则系统会认为回车也是输入值,则不是数字,怎么解决?

如下代码,例输入:5+6回车,则系统会认为回车也是输入值,则不是数字,怎么解决?

C
长风秋雁 2023-03-18 13:09:39
// opertion#include <stdio.h>#include <conio.h>#include <ctype.h>int main(void){double number_1 = 0.0;char operition = 0;double number_2 = 0.0;printf("请输入你需要计算的算式:");scanf("%lf %c %lf",&number_1,&operition,&number_2);if( (isdigit(number_1)) || (isdigit(number_2))){switch(operition){case '+':printf("=%1f",number_1 + number_2);break;case '-':printf("=%lf",number_1 - number_2);break;case '*':printf("=%lf",number_1 * number_2);break;case '/':if(number_2 == 0){if(number_1 < 0)printf("=-∞");else if(number_1 == 0)printf("你的除数与被除数都为零,无解");elseprintf("=∞");}elseprintf("%lf",number_1 / number_2);break;case '%':if(number_2 == 0)printf("\n你的被取模数为零,无解");elseprintf("=%ld",(long)number_1 % (long)number_2);break;default:printf("\n你输入的运算符不正确。");break;}}elseprintf("\n你输入的不是数字。");getchar();return 0;}
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

f( (isdigit(number_1)) || (isdigit(number_2)))
这里有几个错。
isdigit() 参数必须是整型,不能用于 double.
逻辑或 用得不对,要 逻辑 与 才 说得过去,你需要 number_1 和 number_2 都是数字才可以。
|| 运算,一个是数字就满足 if.
isdigit() 只能判断1个字符。
如果 输入 .2 + .3 就不能通过。
======
正确方法:
int k;
k=scanf("%lf %c %lf",&number_1,&operition,&number_2);
if (k == 3){
输入数据格式正确,进入 switch() 等 判断和计算
}


查看完整回答
反对 回复 2023-03-21
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

你的问题还不是“scanf()把回车作为输入值的问题”,scanf()认为回车是输入的结束。
程序不能得出正确的结果,原因在于:
scanf("%lf %c %lf",&number_1,&operition,&number_2);
这时,如果你输入的第一个参数和第三个参数,如果不是数字型的就会出错。
if( (isdigit(number_1)) || (isdigit(number_2)))
也有问题,首先 isdigit()用错。函数原型为int isdigit(char c),要求参数为字符类型而不是f型。
其次(isdigit(number_1)) || (isdigit(number_2))应该是&&而不是||。
另外程序本身还存在一些问题,比如,两个实型数求余怎么求?

查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信