#include <stdio.h>
float diff_abs(float,float);
int main() {
float x;
float y;
scanf("%f", &x);
scanf("%f", &y);
printf("%f\n", diff_abs(x,y));
return 0;
}
float diff_abs(float a, float b) {
float *pa = &a;
float *pb = &b;
float tmp = a;
a = a-b;
b = *pb-tmp;
printf("%.2f\n", a);
printf("%.2f\n", b);
}
大家好,我正在做一个C程序,它应该保存在变量a-b和b变量b-a中。 一切都好,但是如果我在输出结束时运行我的代码,编译器会向我显示以下消息:
3.14
-2.71
5.85
-5.85
1.#QNAN0
意味着什么1.#QNANO?
答案 0 :(得分:1)
问题是,您没有return
来自被调用函数diff_abs()
的值,而您尝试使用return
- ed值。它调用undefined behavior。
引用C11
,章节§6.9.1,功能定义
如果到达了终止函数的
}
,则使用函数调用的值 调用者,行为未定义。
根据您的评论显示,您不需要从该功能获得任何返回值。在那种情况下,
void
printf()
中的最后一次main()
调用。被调用函数内的printf()
将被执行,打印件将自行显示,您不需要将该函数作为参数传递给另一个printf()
。答案 1 :(得分:1)
在这段代码printf("%f\n", diff_abs(x,y))
中,您告诉编译器打印float
类型的变量,该变量应该是函数diff_abs
的返回值。但是在你的函数diff_abs
中,你没有返回任何值。
等待%f
的{{1}}因此不会获得任何值,它会打印float
,这意味着#QNAN0
。因此,您可以按如下方式更改代码:
在您的主页:
Not A Number
在功能中:
//printf("%f\n", diff_abs(x,y)); //comment this line
diff_abs(x,y); //just call the function