【问题标题】:C program to find areaC程序查找区域
【发布时间】:2013-07-13 18:19:00
【问题描述】:

以下代码有问题:

#include<stdio.h>
#include<conio.h>
float area_crcl(int);
float area_rect(int,int);

void main()
 {
 int n,a,b,r;
 float area;
 clrscr();
  printf("\nEnter your choice-\n1.Area of circle\n2.Area of Square\n3.Area of Rectangle\n");
  scanf("%d",&n);
   switch(n)
     {
     case 1:printf("\nEnter the radius of circle..\n");
        scanf("%d",&r);
        area=area_crcl(r);
        printf("\nArea of circle is %d\n",area);
        break;

     case 2:printf("\nenter the edge of square\n");
        scanf("%d",&a);
        area=area_rect(a,a);
        printf("\nArea of square is %d\n",area);
        break;

     case 3:printf("\nenter the lenght n breadth of rectangle\n");
        scanf("%d%d",&a,&b);
        area=area_rect(a,b);
        printf("\nArea of rectangle is %d\n",area);
        break;

     default:printf("\nU entered wrong choice..\n");
   }
  getch();
 }

 float area_crcl(int r)
   {
    float area;
    area=3.14*r*r;
    return area;
   }

 float area_rect(int a,int b)
   {
    float area;
    area=a*b;
    return area;
   }

我得到的输出是:

输入您的选择- 1.圆的面积 2.广场面积 3.矩形面积 1

输入圆的半径.. 2

圆的面积为0

为什么我的输出是 0?

【问题讨论】:

  • pi=3.14...多么美妙的精确度
  • 另外,int main().
  • 此外,@OP 的另一个问题:下次检查您尝试使用的函数的文档 - 不要做出假设。这可不好。
  • @hacks:我对仍在使用 Turbo C(++) 的人没有任何同情。那里的免费编译器要少得多……而且显然它们也更符合要求。
  • @PHIfounder:或者他可以,我不知道,谷歌搜索“免费 c 编译器”并阅读第一个结果......或第一页上的任何其他结果,就此而言。没有。没有同情心。 :P

标签: c++ c function parameters


【解决方案1】:

您的打印声明是:

printf("\nArea of circle is %d\n",area);

areafloat 并且您使用的是 %d 格式字符串,这意味着 int 变量。这行不通 - 使用 %e%f%g%a

【讨论】:

  • 伙计,我现在有另一个疑问..为什么我的值是 0 ?例如,如果 area 的浮点值是 11.236 在这种情况下 %d 应该打印整数部分(11.236),即 11 ...为什么 0 ..??!!
  • @DD24,谁告诉你它会打印整数部分?它不是那样工作的。您不得使用 %d 来匹配除 int 之外的任何内容。
【解决方案2】:

对于浮点数,在 printf 中使用 %f。更一般地,要非常小心地将 printf 中的 % 与传递的参数匹配。没有检查,这完全由程序员负责

printf("\nArea of circle is %f\n",area);

【讨论】:

  • 一些编译器实际上会检查格式字符串(如果你在那里使用文字字符串)并警告你类型不匹配。但是,是的,不要依赖它。始终检查自己。
  • 伙计,我现在有另一个疑问..为什么我的值是 0 ?例如,如果 area 的浮点值是 11.236 在这种情况下 %d 应该打印整数部分(11.236),即 11 ...为什么 0 ..??!!
【解决方案3】:

您正在使用%d 打印float,这是您的问题。

除了你的错误之外还有一件事:

只是不要被conio.h 卡住,好吧...继续生活:)

【讨论】:

  • 哦,f**k ...这%d ..shitt mann!!感觉我很蠢 .. :/ 非常感谢大家 .. 帮我解决了这个愚蠢的问题..
  • @DD24 并且尽快转储turbo C,使用MinGW或cygwin并尝试通过命令界面编译,如果你使用linux更好:)
  • 伙计,我现在有另一个疑问..为什么我的值是 0 ?例如,如果 area 的浮点值是 11.236 在这种情况下 %d 应该打印整数部分(11.236),即 11 ...为什么 0 ..??!!
  • @DD24 看看你看到的是一个未定义的行为,这意味着任何事情都可能发生,是的,任何事情......实际上 float int 的存储方式不同,因此这里没有进行转换,你看到的可能是任意随机数。如果我没记错的话....在标准 C 中,float 会自动转换为双精度,因此您会看到 8 bytes 用于存储 double4 bytes 用于 int ,您再次制作了例外。
  • 啊啊啊啊好多..!!这很有帮助.. 很好,谢谢哥们.. 但我想在一个地方纠正你,如果你说.. float 会自动转换为 double...这种自动类型转换发生在 JAVA 兄弟中.. 不是在 C 中。 .我想..我 ryt ???在 c int 中也是 2 字节长的 naa??
【解决方案4】:

printf("\n圆的面积是%d\n",area);

区域是浮动的,所以上面的语句不起作用,请使用下面正确的:

printf("\n圆的面积是%f\n",area);

【讨论】:

    【解决方案5】:

    areafloat 类型,您正在使用 %d 说明符来打印它。 功能

     area_rect()
     area_crcl()
    

    两者都返回分配给area的浮点值(也是浮点数)
    改变

     printf("\nArea of circle is %d\n",area);
    

     printf("\nArea of circle is %f\n",area);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2016-10-02
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多