整数比较不正确或不比较

时间:2012-06-11 06:18:49

标签: c++ arrays int

我有一个数组:

int array[] = { 1,3,2,5,4,7,6,9,8,10 };

当我尝试单步执行数组并比较数字时,没有一个触发if条件从而触发交换:

for( int i=0; i<9; i++)
{
    if (array[i] > array[i++])
    {
    cout << "Swapping" << array[i] << " " << array[i++]<< endl;
    int temp = 0;
    temp = array[i];
    array[i] = array[i++];
    array[i++] = temp;
    temp = 0;
}

}

是否有一些比较我缺少的整数的细节?它们是否因阵列而被区别对待?

5 个答案:

答案 0 :(得分:4)

i++表示“返回i并设置i = i + 1”。因此,每次使用i++时,您都会将i增加一个会破坏循环。请改用i+1

答案 1 :(得分:3)

i++是一个后增量,并返回先前的值。

 if (array[i] > array[i+1])

目前,您正在将array[i]与自身进行比较。

您还需要以下内容:

temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;

答案 2 :(得分:1)

你增加你的次数太多了。 将您的if语句更改为:

if(array [i]&gt; array [i + 1])

并修复所有其他增量同样远离for循环中的增量。

答案 3 :(得分:1)

表达式:

array[i] < array[i++]

array[i] = array[i++]

是未定义的行为,因此任何事情都可能发生。 (正如其他人指出的那样 不管怎么说,这可能不是你想要的。如上所述,你是 每次循环时递增i 5次。)

答案 4 :(得分:0)

您应该使用以下代码: -

for( int i=0; i<9; i++)
{
    if (array[i] > array[i+1])
    {
     cout << "Swapping" << array[i] << " " << array[i+1]<< endl;
     int temp = 0;
     temp = array[i];
     array[i] = array[i+1];
     array[i+1] = temp;
    temp = 0;
    }
}

声明:if (array[i] > array[i++])相当于if (array[i] > array[i]),这是没有意义的。