| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1422 人关注过本帖
标题:[求助]我写了个求面积的小程序出了问题
只看楼主 加入收藏
kaid
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-12-25
收藏
 问题点数:0 回复次数:13 
[求助]我写了个求面积的小程序出了问题
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "math.h"
#include "process.h"
main()
{
float a,b,c,s,area;

printf("a=");
scanf("%f",&a);
printf("b=");
scanf("%f",&b);
printf("c=");
scanf("%f",&c);
if(a+b>c&&b+c>a&&a+c>b)
{
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f",area);
}

else
{
printf("数据输入错误!重新输入数据请按y并回车,否则请按n回车。\n");
/char temp;
scanf("%c",&temp);
switch(temp)
{
case 'y':
main();
break;
case 'n':
exit(1);
break;

}




}
}

原意本是输入三角形的三边然后求面积,并且防止使用者输入错误的三边值所以叫他重新输入数据,如果要重新输入就按y并回车,不想输入就按n然后回车退出程序。

问题来了,只要输入了错误的三边值只会显示提示信息“数据输入错误!重新输入数据请按y并回车,否则请按n回车”然后就直接结束任务了,到底在哪里出错呢?对了,现在程序是运行不了的,去掉else之后就可以计算正常三角形的面积,总之就是错误多多啦,不用牛人来费心来解答了,只希望各位小牛能够指明指明我等小辈,拜托拜托!

P.S。执行环境是在钟家民编的那套TC集成实验与学习环境7.2中的
搜索更多相关主题的帖子: area printf 面积 
2006-12-25 13:33
mayudong1
Rank: 2
等 级:论坛游民
威 望:1
帖 子:348
专家分:21
注 册:2006-4-18
收藏
得分:0 
建议在else中的scanf前加个getchar();或fflush(stdin);

2006-12-25 13:44
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
得分:0 

给你改了一下,你看可以不?

/* Note:Your choice is C IDE */
#include "stdio.h"
#include "math.h"
#include "process.h"
main()
{
float a,b,c,s,area;
char temp;

printf("a=");
scanf("%f",&a);
printf("b=");
scanf("%f",&b);
printf("c=");
scanf("%f",&c);
if(a+b>c&&b+c>a&&a+c>b)
{
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("area=%f",area);
}
else
{
printf("数据输入错误!重新输入数据请按y并回车,否则请按n回车。\n");
temp=getch();
switch(temp)
{
case 'y':
main();
break;
case 'n':
exit(0);
break;
defualt:break;
}
}
getch();
}


新王登基,血流成河!
2006-12-25 14:20
kaid
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-12-25
收藏
得分:0 
嗯, 3楼的程序我试着运行一下确实能够解决问题,我试着删掉defualt:break;和最下面的getch(); 程序仍然能够运行。

可见那个getch()的函数是关键,我上网找找这方面的资料,好像是说什么getch()函数是输入字符但是不显视出了的函数,弄了好久也终究不明白,为什么换成不显字符的getch()函数就能够通过呢?难道用户能否看到字符还对程序内部运作有影响么?

另外最后的那个getch()函数做什么用呢?

另外2楼的fflush(stdin)上网查了一下是清空标准输入缓冲区的作用,而且不是C标准MS不能在TC中运行的喔

汗~~这两个函数居然书本上和C语言函数速查.chm一个都没有提到,看来还要好好的上网找找东西补习一下。。。
2006-12-25 22:08
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 

#include <stdio.h>
main()
{
float a,b,c,s,area;
char temp='y';
while(temp=='y')
{
printf ("\na=");
scanf("%f",&a);
printf("b=");
scanf("%f",&b);
printf("c=");
scanf("%f",&c);

if(a+b>c&&b+c>a&&a+c>b)
{
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("\narea=%f\n",area);
}
else
printf("input data error\n");
printf("continue or not? y/n ");
getchar();

temp=getch();
}


这个社会太复杂。。。
2006-12-26 16:21
acuiping
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-12-20
收藏
得分:0 
你用一个回显得getchar()也可以。因为你在前面输入数字时最后有个回车,如果没有getchar(),这个回车被读入temp中,当然不会执行switch中的任何操作,就会直接退出
2006-12-26 19:34
kaid
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-12-25
收藏
得分:0 
6楼的话似乎有些道理,不过我并没有回车啊,只要我输入任意一个键就结束程序了,根本轮不到我按回车
2006-12-27 00:58
kaid
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-12-25
收藏
得分:0 

5楼的代码提示还是相当标准的嘛,不过我还是想用中文提示,只要写得再简练些就好了。

另外将我的main()函数改成了用while()循环替代我还没有想过,明天有时间再继续研究一下两者的优缺吧。

还有该代码在我的这套环境是通不过的
出错提示:Compound statement missing } in function main

2006-12-27 01:17
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 

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

printf("a=%f b=%f c=%f\n",a,b,c);


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2006-12-27 08:57
kaid
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-12-25
收藏
得分:0 
9楼的这段代码是用来做什么的吗。。。(饶恕我吧,真滴不知道耶,难道就是出错的提示么?)
2006-12-27 09:59
快速回复:[求助]我写了个求面积的小程序出了问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024655 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved