为什么 while ((i <= 9) && square == pow(i, 2)) { cout << i << square; i++; 输出的结果不是我想要的?

4
#include <iostream>
#include <cmath>
using namespace std;
int main() {

int i = 0;
int square = 0;

// Write a while loop here:

while ((i <= 9) && square == pow(i, 2)) {
    cout << i << square;
    i++;


}
}

  //Why is this not printing out 
/* 0   0
   1   1
   2   4
   3   9
   4   16
   5   25
   6   36
   7   49
   8   64
   9   81
          */

/有人可以向我彻底解释一下为什么这个while循环无法打印出这个数字序列吗?
我不明白为什么它只打印出00而不是那个数字列表。有人能告诉我为什么这个while循环不能正常工作吗?
/


1
square 被初始化为零,之后再也没有被更新过。你是不是想要赋值给它呢...? - ravnsgaard
你好,你对答案清楚吗?还是需要更多的解释? - KL_KISNE_DEKHA_HAI
3个回答

3
您可能想要做的是:
while (i <= 9) {
    square = pow(i, 2);
    cout << i << square;
    i++;
}

或者:

while (i <= 9 && (square = pow(i, 2))) {
    cout << i << square;
    i++;
}

否则,当square == pow(i, 2)不成立时,循环将结束,并且您似乎想要分配一个square而不是比较它。

第二个版本无法正确运行,需要添加一些括号修复优先级问题。而且我不建议在任何情况下在循环条件中进行赋值。 - john

1
你应该这样做:

// For version
double square;

for (int i = 0 ; i <= 9 ; i++) {
    square = pow(i, 2);
    cout << i <<" "<< square <<"\n";
}

//While version
double square;
int i = 0;

while (i <= 9) {
    square = pow(i, 2);
    cout << i <<" "<< square <<"\n";
    i++;
}

pow函数返回一个double类型的答案。

我写了double square是因为当你将某些数的平方赋值给整数变量时,可能会出现截断/四舍五入的情况。更多信息请参见this question


你好 @Juan,如果你对答案清楚了,请标记一下。如果你还有任何疑问,请告诉我们。 - KL_KISNE_DEKHA_HAI

1
原因是在每次迭代中您没有更新“square”值,它始终等于零,因此您的while循环立即通过i = 1终止,因为square = 0且pow(i,2)= 1。您应该注意到square == pow(i,2)条件不会将右侧值分配给square变量。它只是比较它们。从您想要的输出中,我理解您可能希望得到这样的结果:
i = 0;
while (i <= 9) {
    cout << i << "     " << pow(i, 2);
    i++;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接