| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1033 人关注过本帖
标题:新人再来问问题
只看楼主 加入收藏
折翼
Rank: 2
来 自:广东广州
等 级:论坛游民
帖 子:105
专家分:77
注 册:2010-10-22
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:21 
新人再来问问题
这是一道求三角形面积的题目。 我想做到的是当输入数据(三角形的三边关系)正确时,就计算三角形的面积。当数据不正确时就输入提示,然后再输入数据。下面是我写的一段程序,好像有点问题。尤其是goto那里的问题。我想知道怎样修改才能做到最好。呃。。。。。因为自学C语言没多久,有很多东西都不懂,前辈们不要讲得太过深,我会看不明白的。因为还有很多东西我没有看完。谢谢。
#include"stdio.h"
#include"math.h"
 main()
    {
        int a,b,c;
        double s,area;
        printf("Please input a,b,c:\n");
        loop:
        scanf("%d%d%d",&a,&b,&c);
        if((a+b)>c&&(b+c)>a&&a>0&&b>0&&c>0&&(a+c)>b)
        {
        s=((double)(a+b+c)/2);
        area=sqrt(s*(s-a)*(s-b)*(s-c));
        printf("area=%g\n",area);
        return(getch());
        }

        else(printf("Please input the correct number:\n"));
        goto loop;
        getch();
        }
搜索更多相关主题的帖子: 新人 
2010-11-07 23:56
折翼
Rank: 2
来 自:广东广州
等 级:论坛游民
帖 子:105
专家分:77
注 册:2010-10-22
收藏
得分:0 
没有人帮忙看一下?
2010-11-08 10:38
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:1 
看了 尝试下不用GOTO吧

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-11-08 13:19
langman945
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2010-10-31
收藏
得分:2 
看下我这个吧!

#include <stdio.h>
#include <math.h>
main( )
{    float a,b,c,area,p;
  scanf("%f,%f,%f",&a,&b,&c);
  p=(a+b+c)/2;
  if(a+b>c&&a+c>b&&b+c>a)
  {    area=sqrt(p*(p-a)*(p-b)*(p-c));
    printf("Area=%6.2f\n",area);  
  }
  else  printf("Error\n");
}
2010-11-08 17:13
折翼
Rank: 2
来 自:广东广州
等 级:论坛游民
帖 子:105
专家分:77
注 册:2010-10-22
收藏
得分:0 
以下是引用langman945在2010-11-8 17:13:53的发言:

看下我这个吧!

#include
#include
main( )
{    float a,b,c,area,p;
  scanf("%f,%f,%f",&a,&b,&c);
  p=(a+b+c)/2;
  if(a+b>c&&a+c>b&&b+c>a)
  {    area=sqrt(p*(p-a)*(p-b)*(p-c));
    printf("Area=%6.2f\n",area);  
  }
  else  printf("Error\n");
}
嗯,这一个也可以。不过我希望的是在输入错误的前提,再输入一次,直到输入正确为止。而不是输入错误后,结束程序。
2010-11-08 17:28
折翼
Rank: 2
来 自:广东广州
等 级:论坛游民
帖 子:105
专家分:77
注 册:2010-10-22
收藏
得分:0 
以下是引用vandychan在2010-11-8 13:19:51的发言:

看了 尝试下不用GOTO吧
为什么不用GOTO?
2010-11-08 17:36
谁的益达
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2010-10-16
收藏
得分:1 
#include"stdio.h"
#include"math.h"
main()
    {
        int a,b,c;
        double s,area;
        printf("Please input a,b,c:\n");
        loop:
        scanf("%d%d%d",&a,&b,&c);
        if((a+b)>c&&(b+c)>a&&a>0&&b>0&&c>0&&(a+c)>b)
        {
        s=((double)(a+b+c)/2);
        area=sqrt(s*(s-a)*(s-b)*(s-c));
        printf("area=%g\n",area);
        
        }

        else(printf("Please input the correct number:\n"));
      goto loop;
        }
看一下
2010-11-08 17:39
折翼
Rank: 2
来 自:广东广州
等 级:论坛游民
帖 子:105
专家分:77
注 册:2010-10-22
收藏
得分:0 
以下是引用谁的益达在2010-11-8 17:39:56的发言:

#include"stdio.h"
#include"math.h"
main()
    {
        int a,b,c;
        double s,area;
        printf("Please input a,b,c:\n");
        loop:
        scanf("%d%d%d",&a,&b,&c);
        if((a+b)>c&&(b+c)>a&&a>0&&b>0&&c>0&&(a+c)>b)
        {
        s=((double)(a+b+c)/2);
        area=sqrt(s*(s-a)*(s-b)*(s-c));
        printf("area=%g\n",area);
        
        }

        else(printf("Please input the correct number:\n"));
      goto loop;
        }
看一下
呃。。。。前辈有一个问题。。。。。这一个程序输出结果后不会结束。。。它会等待下一次输入。。。
2010-11-08 17:55
折翼
Rank: 2
来 自:广东广州
等 级:论坛游民
帖 子:105
专家分:77
注 册:2010-10-22
收藏
得分:0 
还有一个问题,为什么我故意输入小数的时候,它会变成死循环?
2010-11-08 17:58
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:6 
else 那用 {} 把那个 goto 括进去。否则不管什么情况都会 goto 的。
死循是因为,只是那个 scanf 卡住了,它能读缓冲区里的东西(虽然没读对),所以不会等待人再输入了。
2010-11-08 18:14
快速回复:新人再来问问题
数据加载中...
 
   



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

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