C 数组中的移动元素
我不确定为什么下面的代码不起作用,我正在尝试在数组中找到NaN的值,然后将NaN移动到数组中的第一个元素(元素0),并将现有元素0与NaN所在的位置交换。请你查一下我的密码好吗?也许你们能看到一些我看不到的东西 提前谢谢C 数组中的移动元素,c,C,我不确定为什么下面的代码不起作用,我正在尝试在数组中找到NaN的值,然后将NaN移动到数组中的第一个元素(元素0),并将现有元素0与NaN所在的位置交换。请你查一下我的密码好吗?也许你们能看到一些我看不到的东西 提前谢谢 #define NaN (float)(1e308*10*0) void movenan(float array[], int size) { int w; float hold; float move; for(w = 0; w < SIZE - 1; w++)
#define NaN (float)(1e308*10*0)
void movenan(float array[], int size)
{
int w;
float hold;
float move;
for(w = 0; w < SIZE - 1; w++)
{
if(array[w] == NaN)
{
hold = array[w];
array[w] = array[0];
array[0] = hold;
}
}
#定义NaN(浮点)(1e308*10*0)
void movenan(浮点数组[],整数大小)
{
int w;
浮动持有;
浮动运动;
对于(w=0;w
}你的支票是错的:南不等于任何东西,包括他们自己
用于检查该值是否为NaN
如果isnan()
不可用,检查f
是否为NaN的标准方法如下:f!=f
。当ifff
is NaN时,计算结果为真
<这里有更多的信息:(问题是关于C++,但也有很多关于C的信息)
最后,您的
for
循环的终端条件看起来可疑。你是说
还是如果你试图解析整个数组,那么条件应该是
我怀疑问题出在你的比较上。南并不是那么始终如一
您应该使用isnan()
函数或其变体之一。如果出于愚蠢的原因不想使用isnan,检查nan的最简单方法是If(array[w]!=array[w])
。对于一个真正的NAN,这应该是可行的,假设您的优化器没有去掉它
在这个循环中,你也会有一个循环(应该是w
,size
可能是另外一个循环,你不想去,直到size-1
)我想你不能用这种方法测试NaN。请看这篇文章:循环也是针对(w=0;ww
而不是w
,不是吗<不知什么原因,我在这里看不到我的全文。如果优化器消除了,则循环条件应为=在浮点上,您确实需要一个更好的编译器。