猿问

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

// 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("你的除数与被除数都为零,无解");
else
printf("=∞");
}
else
printf("%lf",number_1 / number_2);
break;
case '%':
if(number_2 == 0)
printf("\n你的被取模数为零,无解");
else
printf("=%ld",(long)number_1 % (long)number_2);
break;
default:
printf("\n你输入的运算符不正确。");
break;
}
}
else
printf("\n你输入的不是数字。");

getchar();
return 0;
}

长风秋雁
浏览 76回答 2
2回答

慕容森

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() 等 判断和计算}

尚方宝剑之说

你的问题还不是“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))应该是&&而不是||。另外程序本身还存在一些问题,比如,两个实型数求余怎么求?
随时随地看视频慕课网APP
我要回答