我得到了这个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]
任何人都可以帮我解决这个问题吗?
答案 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];
}
}
上面的代码按预期工作。