为了搜索数组中的元素,我将大小为20的数组分成两部分。 a将从0-9搜索,b将从10-19搜索。但是这段代码不起作用。这有什么问题?
for( a=0,b=10; a<9,b<20 ; a++,b++ )
{
if(x[a]==n)m=a;break;
if(x[b]==n)m=b;break;
if(x[c]==n)m=c;break;
if(x[d]==n)m=d;break;
}
答案 0 :(得分:4)
代码中的一个问题是for
循环的条件。它应该是:
for (a = 0, b = 10; a < 9 && b < 20; a++, b++) { ... }
请注意&&
和a < 9
之间的b < 20
。
您的for
循环中也存在逻辑缺陷。实际上,对于循环的每次迭代,a
和b
增加1.这意味着当a = 9
时,a < 9
将为false
,并且for
循环停止。但是,当a = 9
,然后是b = 19
时,您永远不会看x[19]
,因为循环已经结束。
我认为正确的条件是:a < 10 && b < 20
。
事实上,您并非真正需要a
和b
。请看以下示例:
for (a = 0; a < 10; a++) {
if (x[a] == n || x[a + 10] == n) {
m = a;
break;
}
}
此外,如果if
块中有多个语句,则必须将它们包含在{ ... }
括号中。
// Incorrect
if (x[a] == n) m = a; break;
// Correct
if (x[a] == n) {
m = a;
break;
}
// Also correct
if (x[a] == n) { m = a; break; }
正如其他用户所指出的,你在循环中使用c
和d
,但它们是什么?
答案 1 :(得分:0)
您的代码有很多错误,您可以尝试使用
for( a=0,b=10; a<10 && b<20 ; a++,b++ )//&& between conditions and a<10 otherwise 9th element will be skipped
{
if(x[a]==n)
{
m=a;break;//parenthesis used because it contains 2 statement
}
if(x[b]==n)
{
m=b;break;//parenthesis used because it contains 2 statement
}
//extra statements were removed
}