c语言怎么解决scanf()把回车作为输入值的问题,请仔细看我的代码

//opertion#include<stdio.h>#include<conio.h>#include<ctype.h>intmain(void){doublenumb... // 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;
}
如上代码,例输入:5+6回车,则系统会认为回车也是输入值,则不是数字,怎么解决?
展开
 我来答
xoaxa
推荐于2018-05-06 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3405万
展开全部
1、对于scanf("%lf%c%lf",&number_1,&operition,&number_2);,注意格式串中没有(也不能有)空格,输入响应时,要连续输入三个量,中间也不能有空格,否则,必然会造成误读。键入三个量后,接下来的回车键表示本次输入已经结束,回车键不会被认为是数值的一部分,而会被“吃掉”,输入缓冲区中没有任何遗留。

2、函数isdigit(char)的参数ASCII字符,或0 -- 127 的整形数,用double类型作为参数是错误的。
追问
谢谢,写的很好,可采纳意见就一个
金色潜鸟
推荐于2016-09-16 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5543万
展开全部
if( (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() 等 判断和计算
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lygszmjj
2015-02-26 · TA获得超过1814个赞
知道小有建树答主
回答量:1192
采纳率:0%
帮助的人:408万
展开全部
你的问题还不是“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))应该是&&而不是||。
另外程序本身还存在一些问题,比如,两个实型数求余怎么求?
追问
谢谢,写的很好,不过采纳意见就一个。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bhtzu
2015-02-26 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4075万
展开全部
你的问题在于空格。
如果scanf里面有空格(你当前代码),那么输入也要加上空格:6 + 5回车
如果按照你的输入,那么scanf里面格式化字符串之间的空格要去掉。
追问
谢谢,可还是不行呢,输入5+6回车后,显示你输得不是数字
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友cde2412
2015-10-03 · 超过12用户采纳过TA的回答
知道答主
回答量:49
采纳率:100%
帮助的人:15万
展开全部
你的代码有错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式