为什么我从这个循环得到这个输出?

时间:2017-12-26 21:05:37

标签: c++ for-loop

#include <iostream>
using namespace std;

我是cpp和编程的新手,我正在尝试找到一个数字的因子,max,为什么我的代码输出会以它的方式出现?

int max;
cout << "Enter a number you'd like to see the divisors of: " << endl;
cin >> max;

//I am trying to find all divisors for the number max
//I know this isn't the most efficienct way but I thought that it would work.
//Instead of 50, 25, 20, 10, 5 ,1 for output it looks like 50, 25, 25, 25 25, 5 

for (int t=1; t <= max; t++) {
  if (max % t == 0) {
    int m = max/t; 
  }
} 
cout << m << endl;

3 个答案:

答案 0 :(得分:3)

您的输出放错了地方。将if (max % t == 0) { // start of a block int m = max / t; std::cout << m << '\n'; } // end of a block 语句移到if statement块中:

{}

确保使用大括号{{1}}正确标记block of statements。现在,对于 50 的给定输入,输出为:

  

50 25 10 5 2 1

Live example on Coliru

答案 1 :(得分:2)

using namespace std;

正如BO41所说,你永远不应该使用命名空间,这里有一些原因:Why is "using namespace std" considered bad practice?

您应该只编写您正在使用的内容,而不是使用命名空间,例如:

using std::cout;
using std::endl;

现在回到问题:

for(int t=1; t <= max; t++){
    if(max % t == 0)
        int m = max/t; 
} cout << m << endl;

请注意,您在if中定义了m并在其外部使用它。另外,如果不是那样的话,你只打印你找到的最后一个除数。你应该做更多的事情:

for(int t = 0; t <= max; t++){
    if(max % t == 0){
        int m = max/t
        cout << m << endl;
    }
}

在这里你将打印每个除数的最大值。 就个人而言,我总是会为if语句打开一个块,即使块中只有一行,对我来说它更有条理,可以防止错误。

答案 2 :(得分:0)

这是你的整个计划吗?变量

int m

超出了

行的范围
cout << m << endl;

这让我相信你有另一个名为&#34; m&#34;在程序中早先声明的,被新声明的int遮蔽,也被称为&#34; m&#34;在if-block里面。如果是这种情况,则先前声明的变量&#34; m&#34;在if-block之外会打印到cout。