#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;
答案 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
答案 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。