问题描述
我从C开始
我想更改为
int test(int nb){
int rv = 0;
if(nb=1)
return (1)
while(rv < nb) { // change this line
if(rv * rv == nb)
return (rv)
rv++;
}
return (0);
}
我可以做:
for (int rv=0; rv<nb.length; rv++)
感谢您的帮助
解决方法
所以for
循环的基本语法是:-
for(initialization; condition; increment){
// your code
}
因此,您可以将while
循环重写为for
,如下所示:-
for (int rv=0; rv<nb; rv++){
//rest of code
}
您的代码存在问题:-
for (int rv=0; rv<nb.length; nb++)
// ^^ nb is integer type so nb.length doesn't make sense
在循环中增加nb
也会使循环永远重复。
注意:-if(nb=1)
在C中,=
是一个赋值运算符。要进行比较,您需要使用==
。
您可能想要这样:
int test(int nb)
{
if (nb == 1) // << changed = to ==
return (1); // << added missing ;
for (int rv = 0; rv < nb; rv++;) // << modified
{
if(rv * rv == nb)
return (rv); // << added missing ;
}
return (0);
}
但是我不确定您的原始代码最初是否正确。
,对于初学者,就使用rv
的冗余值而言,while循环中的条件是冗余的。
while(rv < nb) { // change this line
if(rv * rv == nb)
return (rv)
rv++;
}
您可以像这样重写循环
while ( rv < nb / rv ) ++rv;
然后是
return rv * rv == nb ? rv : 0;
当函数参数为无符号整数类型时,逻辑上也更加一致。
可以通过以下方式将上图所示的while循环更改为for循环
int test( unsigned int n )
{
unsigned int i = 1;
for ( ; i < n / i; i++ );
return i * i == n ? i : 0;
}
,
for(int rv = 0;rv < nb;rv++) {
并删除rv++;