C 数组中的移动元素

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++)

我不确定为什么下面的代码不起作用,我正在尝试在数组中找到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++)
{
    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
。当iff
f
is NaN时,计算结果为真

<这里有更多的信息:(问题是关于C++,但也有很多关于C的信息)
最后,您的
for
循环的终端条件看起来可疑。你是说
还是
如果你试图解析整个数组,那么条件应该是

我怀疑问题出在你的比较上。南并不是那么始终如一

您应该使用
isnan()
函数或其变体之一。如果出于愚蠢的原因不想使用isnan,检查nan的最简单方法是
If(array[w]!=array[w])
。对于一个真正的NAN,这应该是可行的,假设您的优化器没有去掉它


在这个循环中,你也会有一个循环(应该是
w
size
可能是另外一个循环,你不想去,直到
size-1

我想你不能用这种方法测试NaN。请看这篇文章:循环也是针对(w=0;ww
而不是
w
,不是吗<不知什么原因,我在这里看不到我的全文。如果优化器消除了
,则循环条件应为
=