我将浮点值传递给函数square但是得到的值是0

时间:2018-02-16 06:40:34

标签: c

#include<stdio.h>
#include<conio.h>

float square(float);

main()
{
    float a,b;
    printf("enter the number=");
    scanf("%d",&a);
    b=square(a);
    printf("the square is=%d",b);
}

float square(float x)
{
    float y;
    y=x*x;
    return(y);
}

4 个答案:

答案 0 :(得分:3)

scanf("%d",&a);

需要

scanf("%f",&a);

%d用于阅读int%f用于阅读float

如果提高编译器的警告级别,则可能在编译时检测到该问题。例如,使用gcc -Wall,我得到以下输出:

soc.c:5:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 main()
 ^
soc.c: In function ‘main’:
soc.c:9:11: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘float *’ [-Wformat=]
     scanf("%d",&a);
           ^
soc.c:11:12: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]
     printf("the square is=%d",b);

答案 1 :(得分:2)

如果您使用的是浮点数,则必须在"%f"printf调用中使用scanf说明符。现在你有"%d",但这是针对整数值的(你可以阅读here)。

所以,试试这个:

...
scanf("%f", &a);
b=square(a);
printf("the square is=%f", b);
...

答案 2 :(得分:2)

在主要功能的scanf和printf中使用%f而不是%d

答案 3 :(得分:0)

float的格式说明符是“%f”,而“%d”用于整数。

#include<stdio.h>
#include<conio.h>

float square(float);

main() {
  float a,b;
  printf("Enter the number=");
  scanf("%f",&a);
  b=square(a);
  printf("The square is=%f",b); 
}

float square(float x) {
  float y;
  y=x*x;
  return(y); 
}

此代码应该有效。 虽然我建议你使用整数,因为代码会显示方形输出的小数点。

Enter the number=2
The square is=4.000000