在 C 中将 while 转换为 for

Transform while to for in C

我从 C 开始

我想把 while 改成 for

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(int rv = 0;rv < nb;rv++) {

并删除 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;
}