函数在 C 中没有 return 任何值
Function does not return any value in C
我试图在 C 中进行计算并尝试 return 数学计算的结果值,但是在传递给主函数时没有任何内容打印到屏幕上。我尝试了各种方法,但缺少一些东西。你能帮我更正代码,以帮助我将来在将参数传递给 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);
}
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
}
您没有使用函数中的值...更改:
Raden_CALC(number);
printf("\nResult: %lf", number);
到
number = Raden_CALC(number);
printf("\nResult: %lf", number);
或
printf("\nResult: %lf", Raden_CALC(number));
如果您 return 来自函数的内容,您需要使用值 returned。
double result=Raden_CALC(number);
printf("Result: %lf\n", result);
这可能是一个疯狂的解释,但我会尝试。如果你问一个人"Please give me an apple",他给了你一个,你会怎么做?在这里你只是忽略它。
也许你想修改函数中的值,传递它的地址并使用指针来改变数据,就像这样
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 The fflush function
Synopsis
#include <stdio.h>
int fflush(FILE *stream);
- If
stream
points to an output stream or an update stream in which the most recent
operation was not input, the fflush
function causes any unwritten data for that stream
to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.
要达到你认为的效果fflush(stdin)
可以用这个
#define flushinput() do { \
int chr; \
while (((chr = getchar()) != EOF) && (chr != '\n')); \
} while (0)
然后在 scanf()
ing 之后像使用函数一样使用宏。
1注意main()
returnsint
.
我试图在 C 中进行计算并尝试 return 数学计算的结果值,但是在传递给主函数时没有任何内容打印到屏幕上。我尝试了各种方法,但缺少一些东西。你能帮我更正代码,以帮助我将来在将参数传递给 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);
}
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
}
您没有使用函数中的值...更改:
Raden_CALC(number);
printf("\nResult: %lf", number);
到
number = Raden_CALC(number);
printf("\nResult: %lf", number);
或
printf("\nResult: %lf", Raden_CALC(number));
如果您 return 来自函数的内容,您需要使用值 returned。
double result=Raden_CALC(number);
printf("Result: %lf\n", result);
这可能是一个疯狂的解释,但我会尝试。如果你问一个人"Please give me an apple",他给了你一个,你会怎么做?在这里你只是忽略它。
也许你想修改函数中的值,传递它的地址并使用指针来改变数据,就像这样
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 The fflush function
Synopsis
#include <stdio.h> int fflush(FILE *stream);
- If
stream
points to an output stream or an update stream in which the most recent operation was not input, thefflush
function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.
要达到你认为的效果fflush(stdin)
可以用这个
#define flushinput() do { \
int chr; \
while (((chr = getchar()) != EOF) && (chr != '\n')); \
} while (0)
然后在 scanf()
ing 之后像使用函数一样使用宏。
1注意main()
returnsint
.