对循环C没有影响的语句

时间:2014-09-29 05:52:52

标签: c for-loop unused-variables

我得到了这个for循环:

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

它应该将数组的元素向右移动,但没有任何反应。 据我所知它应该工作得很好,但编译器说,for-loop语句没有效果:语句没有效果[-Wunused-value]

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

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

由于k从不为负,因此循环无效。

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

答案 1 :(得分: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

答案 2 :(得分:0)

在循环中使用条件k <0 - > 4&lt; 0&gt;假。 所以你的条件在第一次就失败了。所以你的循环没有被执行。所以你的条件语句改为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];
        }
    }

上面的代码按预期工作。