请问这个判断应该怎样写

pang123hui 2009-10-23 08:02:43
今天上C语言课,老师留了3个作业题,其中有一个是输入3边求三角形的面积的,相信大家都做过

这个是我写的


#include <stdio.h>
#include <math.h>

int main(void)
{
float v;
float a;
float b;
float c;
float s;

printf("input three number:a,b,c\n");

ss:
scanf("%f,%f,%f",&a,&b,&c);


if((a+b<=c)||(a+c<=b)||(c+b<=a))
{
printf("输入的三边长无法构成三角形,请重新输入:\n");

goto ss;
}

s=(a+b+c)/2;
v=sqrt(s*(s-a)*(s-b)*(s-c));

printf("三角形的面积是:%f\n",v);
return 0;

}


不过还有一点就是,我想加入一个判断,用来判断输入的a,b,c是否都为数字,是的话程序进行执行并运算出结果,不是的

话就提示一句错误并提示重新输入,但想了很久不知道该怎么写,哪位高手帮帮忙啊,谢谢了
...全文
143 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pang123hui 2009-10-23
  • 打赏
  • 举报
回复
谢谢大家,今天我学到东西了
wxdcxp 2009-10-23
  • 打赏
  • 举报
回复

scanf("%f,%f,%f",&a,&b,&c) == 3
好方法
kouwenlong 2009-10-23
  • 打赏
  • 举报
回复
int scanf();

scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2

scanf("%f,%f,%f",&a,&b,&c) == 3,就是看看是否成功读入值。如果没有成功读入,则不会是3.因此起到判断是否是数字的功能。
illuminati 2009-10-23
  • 打赏
  • 举报
回复
这句:scanf("%f,%f,%f",&a,&b,&c) == 3
scanf也有返回值,返回成功读入数据的个数。
即如果3个都是数字的话,那么都读入成功,返回值也就是3了。如果返回值不是3的话,那显然就是读错了
mstlq 2009-10-23
  • 打赏
  • 举报
回复
The return value of scanf() is the number of variables that were successfully assigned values
pang123hui 2009-10-23
  • 打赏
  • 举报
回复

while(true)
{
if ( scanf("%f,%f,%f",&a,&b,&c) == 3 )
{
break;
}
else
{ printf("输入错误,请重新输入:\n");
fflush(stdin);
}
}//这个while用来判断输入是否正确



请问这个事怎么判断的,谢谢

看不懂这句scanf("%f,%f,%f",&a,&b,&c) == 3
kouwenlong 2009-10-23
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <ctype.h>
#include <math.h>

int main(void)
{
float v;
float a;
float b;
float c;
float s;
printf("input three number:a,b,c\n");
while(true)
{
while(true)
{
if ( scanf("%f,%f,%f",&a,&b,&c) == 3 )
{
break;
}
else
{ printf("输入错误,请重新输入:\n");
fflush(stdin);
}
}//这个while用来判断输入是否正确

if((a+b<=c)||(a+c<=b)||(c+b<=a))
{
printf("输入的三边长无法构成三角形,请重新输入:\n");
fflush(stdin);
}
else
{
break;
}
}
s=(a+b+c)/2;
v=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的面积是:%f\n",v);
return 0;
}
mstlq 2009-10-23
  • 打赏
  • 举报
回复
int in;

in = scanf("%f,%f,%f",&a,&b,&c);
rewind(stdin);

if((3!=in)||(a+b<=c)||(a+c<=b)||(c+b<=a))
…………
wanjingwei 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pang123hui 的回复:]
这个很奇怪,我用的C-Free,是MinGW3.45,请问你用的是什么?
[/Quote]
vs2005
pang123hui 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wanjingwei 的回复:]
引用 6 楼 pang123hui 的回复:
不是的,输入a,b,c程序还是继续执行了,结果为0

我这个if判断是用来判断输入的3边是否可以构成三角形的

怎么我跟你运行结果还不一样,我随便输入三个非数字x,y,z,就一直输出“输入的三边长无法构成三角形,请重新输入:\n”。停不下来,没有你说的输出0
[/Quote]

这个很奇怪,我用的C-Free,是MinGW3.45,请问你用的是什么?
wanjingwei 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pang123hui 的回复:]
不是的,输入a,b,c程序还是继续执行了,结果为0

我这个if判断是用来判断输入的3边是否可以构成三角形的
[/Quote]
怎么我跟你运行结果还不一样,我随便输入三个非数字x,y,z,就一直输出“输入的三边长无法构成三角形,请重新输入:\n”。停不下来,没有你说的输出0
pang123hui 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wanjingwei 的回复:]
你的程序可以判断呀,只是输入字母a,b,c后会循环提示“输入的三边长无法构成三角形,请重新输入:\n”
加那个就只提示一次,就重新输入了
[/Quote]

不是的,输入a,b,c程序还是继续执行了,结果为0

我这个if判断是用来判断输入的3边是否可以构成三角形的
hufen2740 2009-10-23
  • 打赏
  • 举报
回复
自己写一个函数啊
根据输入的数字的ascii判断,如果是,再转换成数字
wanjingwei 2009-10-23
  • 打赏
  • 举报
回复
你的程序可以判断呀,只是输入字母a,b,c后会循环提示“输入的三边长无法构成三角形,请重新输入:\n”
加那个就只提示一次,就重新输入了
pang123hui 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wanjingwei 的回复:]
在scanf("%f,%f,%f",&a,&b,&c);
后加个 fflush(stdin);就可以了
[/Quote]

这个fflush(stdin);是用来清空输入缓冲区,通常是为了确保不影响后面的数据读取,这好像不是我问的问题吧??
albert988 2009-10-23
  • 打赏
  • 举报
回复
如果是要判断输入是否为数字,那a,b,c变量就别设为float,而是用字符串型的来读进,然后判断字符串里是否有除了数字的字符,如果是纯数字则将字符串转为float型数
wanjingwei 2009-10-23
  • 打赏
  • 举报
回复
在scanf("%f,%f,%f",&a,&b,&c);
后加个 fflush(stdin);就可以了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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