输入三条边判断三角形的类型。

xyzyz 2009-04-16 04:48:36
#include <stdio.h>

int main()
{
int a,b,c;
printf("请分别输入三条边长:");
while(1)
{
scanf("%d%d%d",&a,&b,&c);
if(a<=0 || b<=0 || c<=0)
printf("边长不能为非正数,请重新输入:\n");
if(a+b<=c || a+c<=b || b+c<=a)
printf("两边和小于第三边,不能构成三角形,请重新输入:\n");
else
break;
}
if((a==b&&a!=c)||(a==c&&a!=b)||(b==c&&b!=a))
printf("%d,%d,%d这三条边构成一个等腰三角形.\n",a,b,c);
else if(a==b==c)
printf("%d,%d,%d这三条边构成一个等边三角形.\n",a,b,c);
else
printf("%d,%d,%d这三条边构成一般三角形.\n",a,b,c);
}


以上程序想要实现的是输入三条边,然后判断它属于什么三角形。
写完之后自我感觉怪怪的,有几个问题,请教下大家。
第一个:在输入三条边之后,如何判断它们是输入数值的。因为的程序一旦输入字符的话就会陷入死循环了。
第二个:假如现在输入三条边都是数值型的,但是等边三角形的情况好像无法判断,请问是什么原因。

PS:对于这个不知道大家还有什么更好的代码给我参考下,谢谢。
...全文
1608 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yhgz520 2009-04-17
  • 打赏
  • 举报
回复
mark
zhoulehua 2009-04-17
  • 打赏
  • 举报
回复
前面已给出正确答案,帮顶。
yeluofanhua 2009-04-17
  • 打赏
  • 举报
回复
#include "stdio.h"
main()
{
int a,b,c;
while(1)
{

printf("a,b,c is :\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a) break;
}

if(a==b||b==c)
{

if(a==b&&b==c) printf("the triangle is equilateral triangle\n");
else printf("the triangle is isoceles triangle\n");
}
else printf("the triangle is common triangle");
}
yeluofanhua 2009-04-17
  • 打赏
  • 举报
回复
程序我怎么运行不出来呀?
CoolChina 2009-04-17
  • 打赏
  • 举报
回复
第一个问题:
可以判断scanf("%d%d%d",&a,&b,&c)==3是否成立,成立则输入正确。
第二:
a==b==c 改成a==b&&b==c
xiaocha 2009-04-16
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
int a,b,c;
printf("请分别输入三条边长:");
while(1)
{
scanf("%d%d%d",&a,&b,&c);
if(a<=0 || b<=0 || c<=0)
printf("边长不能为非正数,请重新输入:\n");
if(a+b<=c || a+c<=b || b+c<=a)
printf("两边和小于第三边,不能构成三角形,请重新输入:\n");
else
break;
}
if (a==b && b==c) // 先判断最特殊的
printf("%d,%d,%d这三条边构成一个等边三角形.\n",a,b,c);
else if (a==b || a==c || b==c) // 次特殊的条件就可以简单点
printf("%d,%d,%d这三条边构成一个等腰三角形.\n",a,b,c);
else
printf("%d,%d,%d这三条边构成一般三角形.\n",a,b,c);
}
  • 打赏
  • 举报
回复
第一个:在输入三条边之后,如何判断它们是输入数值的。因为的程序一旦输入字符的话就会陷入死循环了。
第二个:假如现在输入三条边都是数值型的,但是等边三角形的情况好像无法判断,请问是什么原因。


1:用int接收数据,遇到非字符认为一次输入结束,你再fflush(stdin);就不会卡在哪里了.
2:你不会特殊判断一次3边是否相等啊
caven1987 2009-04-16
  • 打赏
  • 举报
回复
第一个可以用取得的值的ASCII码来判断是不是>0而且<9
第二个else if(a==b==c) 改为else if(a==b&&b==c)
lingyin55 2009-04-16
  • 打赏
  • 举报
回复
1、你用scanf("%d%d%d",&a,&b,&c);输入,输入字符的时候会自动被忽略掉。
2、else if(a==b==c)
printf("%d,%d,%d这三条边构成一个等边三角形.\n",a,b,c);
判断条件不对,改为
else if ( a == b && b == c && c == a )
mengde007 2009-04-16
  • 打赏
  • 举报
回复
else if(a==b==c)
printf("%d,%d,%d这三条边构成一个等边三角形.\n",a,b,c);
很典型的错误;若果三者相等;a==b为1;那么1就不等于c

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧