函数不会在C中返回任何值

时间:2015-03-05 15:15:14

标签: c argument-passing

我正在尝试在C中进行计算并尝试返回数学计算的结果值,但在传递给主函数时没有任何内容打印到屏幕上。我尝试了各种方法,但缺少一些东西。您是否可以帮助我纠正代码,以便将来在将参数传递给main时编写更有效的代码?提前谢谢!

#include <stdio.h>

#define     PI      3.14159
#define     REM     144.612925

static double Raden_CALC(double imp)
{

    double result;
    result = ((imp + imp) * PI) / REM;
    return result;
}

main()
{

    double number;
    printf("Enter a number: ");

    fflush(stdin);
    scanf("%.4lf", &number);

    Raden_CALC(number);
    printf("\nResult: ", number);
}

4 个答案:

答案 0 :(得分:2)

int main()
{
    double number;
    printf("Enter a number: ");

    fflush(stdin);
    scanf("%.4lf", &number);

    number = Raden_CALC(number); // <-- Assign the return value to number 
    printf("\nResult: %f\n", number); // <-- Add %f to print the number
}

答案 1 :(得分:2)

您未使用该功能的值...更改:

Raden_CALC(number);
printf("\nResult: %lf", number);

number = Raden_CALC(number);
printf("\nResult: %lf", number);

printf("\nResult: %lf", Raden_CALC(number));

答案 2 :(得分:1)

如果从函数返回某些内容,则需要使用返回的值。

double result=Raden_CALC(number);
printf("Result: %lf\n", result);

这可能是一个疯狂的解释,但我会尝试。如果你问某人&#34;请给我一个苹果&#34;,他给你一个,你会做什么?在这里,你只是忽略它。

答案 3 :(得分:1)

也许你想修改函数中的值传递它的地址并使用指针来改变这样的数据

void Raden_CALC(double *number)
 {
    *number = 2 * (*number * PI) / REM;
 }

然后在main() 1

int main()
 {
    double number;

    printf("Enter a number: ");
    if (scanf("%.4lf", &number) == 1)
     {
        Raden_CALC(&number);
        printf("\nResult: %f", number);
     }
    return 0;
 }

另外,不要fflush(stdin),因为它是未定义的行为,并且printf()无法正常使用,您需要传递格式说明符,就像在scanf()中一样,然后它将用您传递的参数替换它们,在本例中为number

您还应该检查scanf()是否有效并且输入有效,否则您将使用未初始化的值导致未定义的行为。

以下内容摘自C11标准草案1570:

  

7.21.5.2 fflush功能

     

<强>概要

   #include <stdio.h>
   int fflush(FILE *stream);
     
      
  1. 如果stream指向输出流更新流,其中最新的   如果没有输入操作,fflush函数会导致该流的任何未写入数据   要传递到主机环境以写入文件; 否则,行为未定义。
  2.   

要达到您认为fflush(stdin)的效果,您可以使用此

#define flushinput() do {                                    \
        int chr;                                             \
        while (((chr = getchar()) != EOF) && (chr != '\n')); \
    } while (0)

然后在scanf()之后使用宏,就像它是一个函数一样。


1 请注意,main()会返回int