-2

我得到了这个for循环:

for(int k=4;k<0;k--){
    if(k == 0){
        test[k] = 5;
        break;
    }
    else{
        test[k] = test[k-1];
    }
}

它应该将数组的元素向右移动,但没有任何反应。据我所知,它应该可以正常工作,但编译器说,for-loop 语句没有效果:statement with no effect [-Wunused-value]

谁能帮我解决这个问题?

4

3 回答 3

1

循环的条件表达式错误。

for(int k=4;k<0;k--){

您使用 4 进行初始化k,然后检查它是否小于 0。由于 4 显然大于 0,因此循环将永远不会迭代。

我想你的意思是以下

for(int k = 4; k >= 0; k-- ) {

但无论如何,代码看起来很糟糕。例如,不清楚神奇数字 5 的含义,也没有必要使用 break stztement。

你可以写一个函数。下面是相应程序的示例

#include <stdio.h>

void shift_right( int a[], size_t n )
{
    if ( n > 1 )
    {
        size_t i = n - 1;
        int last = a[i];

        for ( ; i != 0 ; --i ) a[i] = a[i - 1];

        a[i] = last;
    }
}

int main(void) 
{
    int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    const size_t N = sizeof( a ) / sizeof( *a );
    size_t i;

    for ( i = 0; i < N; i++ ) printf( "%d ", a[i] );
    puts( "" );

    shift_right( a, N );

    for ( i = 0; i < N; i++ ) printf( "%d ", a[i] );
    puts( "" );

    return 0;
}

输出是

0 1 2 3 4 5 6 7 8 9 
9 0 1 2 3 4 5 6 7 8
于 2014-09-29T06:17:55.073 回答
1

循环初始化k为正值 ( k=4),然后k为负值( k<0) 时循环。

由于k永远不会是负数,因此循环无效。

你的意思是写k >= 0吗?

于 2014-09-29T05:56:38.827 回答
0

在您的循环中,您使用条件 k<0 -> 4<0 -> false。所以你的条件本身第一次失败。所以你的循环没有执行。所以将你的条件语句更改为 k>0 而不是 k<0。使用 printf 语句查找循环是否执行。

 for(int k=4;k>=0;k--){
        if(k == 0){
            test[k] = 5;
            break;
        }
        else{
            test[k] = test[k-1];
        }
    }

上面的代码按您的预期工作。

于 2014-09-29T06:00:49.843 回答