C语言问题
# include <stdio.h>
int main(void)
{
float a,b,t,c,d;
printf("请输入两个整数:\n");
printf("a = ");
c = scanf("%f", &a);
printf("b = ");
d = scanf("%f", &b);
printf("%f %f", c,d);
if (c!=1 || d!=1)
{
printf("您输入的不是整数,请重新输入:\n");
printf("a = ");
scanf("%f", &a);
printf("b = ");
scanf("%f", &b);
}
为什么第一个输入数字,第二个输入字母时,等下执行if结果就莫名其妙?没有执行scanf? int main(void)
{
float a,b;
int c d;
printf("请输入两个整数:\n");
printf("a = ");
c = scanf("%f", &a);
printf("b = ");
d = scanf("%f", &b);
printf("%f %f", c,d);
if (c!=1 || d!=1)
{
printf("您输入的不是整数,请重新输入:\n");
printf("a = ");
scanf("%f", &a);
printf("b = ");
scanf("%f", &b);
}
}
浮点类型和整形的相等或不等比较不能直接比
比如
int a = 1;
floatb = 1; (其实是1.0000000000000000000..)
a和b肯定不相等
所以你要想比较浮点型 要类似这种
#define EPSILON 0.00000000001 // (.0个数根据精度需要来定)
float a;
float b;
if (a - b < EPSILON)
printf("a < b\n");
if (a - b > EPSILON)
printf("a > b\n");
if (a - b <= EPSILON ) // 误差在你定义的范围内就认为相等了
printf("a == b\n"); 逻辑错误,c d在if 前没有输入啊 因为第二个输入的是字母,scanf的返回值为0,scanf执行失败。这时候需要使用fflush(stdin)来清理输入缓冲区。这样后面的scanf才能正常输入。还有就是浮点型比较不能直接“!=”,这样不严谨。具体看3L的回复。 数字跟字母返回值都是0,所以if语句条件不成立所以就没有再执行scanf了 alltolove 发表于 2016-10-20 10:40
数字跟字母返回值都是0,所以if语句条件不成立所以就没有再执行scanf了
为什么if哪里没有显示输入? ryxcaixia 发表于 2016-10-20 09:23
int main(void)
{
float a,b;
scanf("%d",&c);
scanf("%d",&d); 看看运算符优先级 {:5_107:} musilintan 发表于 2016-10-20 09:31
因为第二个输入的是字母,scanf的返回值为0,scanf执行失败。这时候需要使用fflush(stdin)来清理输入缓冲区 ...
那怎样才能使scanf执行成功
逻辑错误 本帖最后由 四十二 于 2016-11-16 23:13 编辑
只有四楼说到点子上了~!!!
另外,在比较新的c规范里尽量不要使用fflush这个指令,具体用什么我卖个关子,楼主把鱼币打赏我之后我会一步一步指点你调出来,调出为止。 我只知道存在浮点数比较问题{:10_243:} 3L说的好详细{:10_245:} 本帖最后由 zzg9929 于 2016-11-24 16:46 编辑
清除输入缓冲区~你输入第一个数,回车也跟着存进去了就是你的输入缓冲区有个\0
页:
[1]