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

// 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回车,则系统会认为回车也是输入值,则不是数字,怎么解决?

1、对于scanf("%lf%c%lf",&number_1,&operition,&number_2);,注意格式串中没有(也不能有)空格,输入响应时,要连续输入三个量,中间也不能有空格,否则,必然会造成误读。键入三个量后,接下来的回车键表示本次输入已经结束,回车键不会被认为是数值的一部分,而会被“吃掉”,输入缓冲区中没有任何遗留。

2、函数isdigit(char)的参数ASCII字符,或0 -- 127 的整形数,用double类型作为参数是错误的。追问

谢谢,写的很好,可采纳意见就一个

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-16
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() 等 判断和计算
}本回答被提问者采纳
第2个回答  2015-02-26
你的问题还不是“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))应该是&&而不是||。
另外程序本身还存在一些问题,比如,两个实型数求余怎么求?追问

谢谢,写的很好,不过采纳意见就一个。

第3个回答  2015-02-26
你的问题在于空格。
如果scanf里面有空格(你当前代码),那么输入也要加上空格:6 + 5回车
如果按照你的输入,那么scanf里面格式化字符串之间的空格要去掉。追问

谢谢,可还是不行呢,输入5+6回车后,显示你输得不是数字

第4个回答  2015-10-03
你的代码有错

c语言怎么解决scanf()把回车作为输入值的问题,请仔细看我的代码
1、对于scanf("%lf%c%lf",&number_1,&operition,&number_2);,注意格式串中没有(也不能有)空格,输入响应时,要连续输入三个量,中间也不能有空格,否则,必然会造成误读。键入三个量后,接下来的回车键表示本次输入已经结束,回车键不会被认为是数值的一部分,而会被“吃掉”,输入缓冲区中...

C语言怎么解决scanf()把回车作为输入值的问题
最后fgets可以得到'\\n'。这里为了看到空格和回车,可以把字符窜转成int打印出来。最后的结论就是,如果需要回车,就使用fgets。

C语言判断用户输入是否为回车键? 务必看完问题补充
scanf("%s会忽略回车符,所以直接回车是没用的,程序会以为你没有输入,代码可以改成这种 include <stdio.h>#include <string.h>int main(){char meg[1024];int i=0;while(i<1024){ scanf("%c",meg+i); if(meg[i]==10) break; i++;}meg[i]='\\0';if(i==0) { ...

C语言 scanf输入回车或空格时停止输入
scanf("%d",&a[i]); 无此功能,当你连续按回车时,它继续等待输入数据。可以用gets(s);再sscanf读数。用strlen(s)判断为空行,则停止输入:include<stdio.h> include<stdlib.h> void main(){ int i,a[10];char s[20];for(i=0;i<10;i++) { gets(s);if (strlen(s) < 1) brea...

c语言 SCANF()忽略输入完成以后的回车
呵呵,确实很奇怪。没看过这种要求的。你要让输入和输出在同一行,就算用getchar();也是没用的啊。估计只能用空格作为结束标志了。然后在printf的时候向前退一格就能连起来了。而且即使你不知道要输入多少个数,你设一个计数器不就可以用gotoxy();了?当然,不推荐这么做。

C语言中的scanf()问题
在scanf("%lf %c %lf", &number1, &operation, &number2);之后你输入你的三个参数值后之后肯定输入了一个回车,第二个scanf会把这个回车符作为你scanf("%c", &choice);的内容,所以就直接跳过了,这是因为在函数会把你的输入内容存到输入缓冲区中,如果你上次输入内容多了,多的内容会一直...

C语言scanf();函数的问题
你这个问题很有意思,因为scanf在输入之后,你按下ENTY键,速度很快,会把enter也当做一次输入,所以你在scanf后面加上getchar(),用来缓冲,就没有这个问题了。你试试下面的程序,是不是不会出现你的情况了。include<stdio.h> void main() { int i=0;char s_s;for(i=0; i<=9; i++){ ...

C语言scanf语句的问题。
解决的方法就是要不用“%d%d\\n”,要不输入字符前额外用一次scanf,把回车读掉。其中后者最保险:对于printf也可以使用 另外VC(之外的不清楚)中%d%d这样的也不是分不出来,你输入一个整数加空格或回车再整数就行了。以上这些问题,你保持原来两个连续%d,输入的数据是:整数+空格或回车+整数+任意...

C语言程序使用scanf_s输入字符串按回车弹出警告
\/\/scanf_s("%s%s", p, q);scanf_s("%s", p);scanf_s("%s", q);拆成两次输入吧。。错误报的是访问冲突,两个指针都指向一起了,现在多核多线程,可能两个同时在写同一个内存。(试试看吧)

c语言编程中连续按回车输入数据问题
如果需要达到连续输入,连续输出的功能,那么程序中必须增加代码用于保存连续的输入数据,然后再依次换算这些数据,连续输出。比如:将主函数体换成如下代码 int main(){ int N;int i;float *a;float b;scanf("%d", &N);a = (float *)malloc(N, sizeof(float));for(i = 0; i < N; i+...

相似回答