在C中转换为

问题描述

我从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++;