在数组中移动元素

时间:2012-02-24 08:38:30

标签: 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++)
{
    if(array[w] == NaN)
    {
        hold = array[w];
        array[w] = array[0];
        array[0] = hold;
    }
}

}

3 个答案:

答案 0 :(得分:6)

您的NaN检查错误:NaN不会与任何内容进行比较,包括他们自己。

使用isnan()检查值是否为NaN。

如果isnan()不可用,则检查f是否为NaN的规范方法如下:f != f。如果f为NaN,则评估结果为真。

这里有更多的信息:Checking if a double (or float) is NaN in C++(问题是关于C ++,但也有很多关于C的信息。)

最后,for循环的终端条件看起来很可疑。您的意思是< SIZE还是<= SIZE-1

答案 1 :(得分:2)

我怀疑问题是你的纳米比较。 NaNs不是那么一致。

您应该使用isnan()函数或其中一个变体。如果您不想出于某种愚蠢的原因而使用isnan,那么检查nan的最简单方法是if(array[w] != array[w])。使用真正的NAN,这应该可行,假设你的优化器没有把它拿出来。

你在那个循环中也是一个人(应该是w < sizeSIZE可能是其他东西,你不想去size-1

答案 2 :(得分:0)

如果你试图解析整个数组,那么条件就应该 是w<size否则它只解析到倒数第二个元素。