C语言中的错误,帮我找一下。为什么我输入小数的时候,输出的不是“请输入整数”,而是“请输入正整数”

#include<stdio.h>
void main()
{
int a,b,c;
double x,y,z;
scanf("%d,%d,%d",&a,&b,&c);
x=a-(int)a;
y=b-(int)b;
z=c-(int)c;
if(x!=0||y!=0||z!=0)
printf("请输入整数!\n");
else
{
if(a<=0||b<=0||c<=0)
printf("请输入正整数!\n");
else
{
if((a+b)<=c||(a+c)<=b||(b+c)<=a)
printf("不能构成三角形\n");
else
{
if (a==b&&a==c)
printf("构成等边三角形\n");
else
{
if((a==b)||(a==c)||(b==c))
printf("构成等腰三角形\n");
else
printf("构成三角形\n");
}
}
}
}
}
如果说我输入1.1 1.1 1.1 自动截去小数部分,然后x,y,z都为0 了,那也不能满足if(a<=0||b<=0||c<=0)啊,为什么还是输出“请输入正整数”呢

你的a、b、c定义的都是整数, x、y、z都是双精度的。x=a-(int)a,这句话就有错误,(int)a是强制转化成整数,而a本就是整数,一个整数减去一个整数 结果还是整数,和x定义的不同。

double a,b,c;
double x,y,z;
scanf("%f,%f,%f",&a,&b,&c);
x=(int)a-a;
y=(int)b-b;
z=(int)c-c;
改成这个就ok了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-22
int只能存储整数,你输入小数,经过强制类型转换
x=a-(int)a;
y=b-(int)b;
z=c-(int)c;
(int)a或是(int)b或是(int)c会去掉小数为,比如a=3.6,(int)a=3。x!=0为真。执行
printf("请输入整数!\n"); 这一句。下面的else就不会再执行了。
第2个回答  2011-03-22
因为 scanf("%d" ............) 只能读 整数,所以 x y z 都是 零。

它根本就读不进去 1.1,a 是 int 整形,你输 1.1 并不代表它读进去的是 1.1。至于结果你试一下输 1.1 1.1 1.1 再说。

而且,你好像意思是所有输入都是整数。是想判断输入的数是不是小数吧?
C/C++ 没有类型检测函数。
要检测可以这样,
double a0;
scanf("%lf", &a0);
double testNum = a0 - (int)a0;
if(testNum)
printf("请输入整数\n");
else
int a = (int)a0;
第3个回答  2011-03-22
你一开始的 scanf("%d,%d,%d",&a,&b,&c); 这个中的%d 就限定了是输入整数了,即使是你输入了小数,小数部分也会省略的 而且你前面也是定义 abc为整数
第4个回答  2011-03-22
a,b,c为int型,当输入为小数时,系统自动将小数部分截掉,故执行语句x=a-(int)a;y=b-(int)b; z=c-(int)c;之后,x,y,z的值恒为零,满足 if(a<=0||b<=0||c<=0)
printf("请输入正整数!\n");
执行的条件
当然出现请输入正整数!
第5个回答  2011-03-22
你定义的 a b c 是整型
而在scanf里面输入的是%f的
相似回答