我的教授说,while循环运行提供了n> = 1。但是我没有将任何值放入变量n中,因此根据其“默认”值,可能不会输入循环。而且我不确定如何解决他在说什么!?
#include <iostream>
using namespace std;
int main()
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
int n, count;
double sum;
while (n >=1)
{
cout << "Enter a positive integer N (<1 to stop): ";
cin >> n;
sum = 0;
for (count = 1; count <= n; count++)
sum = sum + (1.0/count);
cout << "Sum = " << sum << endl;
}
cout << "Bye! ";
return 0;
}
答案 0 :(得分:4)
答案 1 :(得分:2)
如果您总是希望循环至少运行一次,那么您需要do...while();
循环。它将始终在第一次迭代时进入循环并执行循环体,然后它将检查while条件以确定它是再次循环还是退出。 do...while();
的形式为
do
{
statements
} while (condition);
在这种情况下,它可以避免在您收到用户的输入之前初始化n
。
在这种情况下,虽然这看起来不像您想要的,因为如果用户输入的数字小于1,则不希望发生任何事情。解决这个问题的一种方法是将输出和输入放入while循环中以及对n
的检查。如果用户输入少于1但仍然允许你提示usr并在每次迭代时获得输入,这将阻止任何事情发生。
while (cout << "Enter a positive integer N (<1 to stop): " && cin >> n && n >= 1)
{
sum = 0;
for (count = 1; count <= n; count++)
sum = sum + (1.0 / count);
cout << "Sum = " << sum << endl;
}
答案 2 :(得分:1)
问题是n
尚未初始化。与其他语言(如Java或C#)不同,原始变量没有任何预定义的&#34;默认&#34;值。简单地占用了之前的堆栈空间;对于所有意图和目的,可以考虑未初始化变量的默认值&#34;随机&#34;。
要解决此问题,只需在进入循环之前初始化变量。
n = 1;
答案 3 :(得分:0)
将n设置为大于或等于1的值,以确保循环进入。由于您没有自己设置,因此默认值可以小于1,这意味着外观有可能,但不能保证触发。
int n = 1
另外,你应该在你的for循环中设置count = 0,因为如果n和count彼此相等,for循环会自动中断并且根本不执行,将sum保留为0.
要确保除以0,请将计数设为计数+ 1。
for (count = 0; count <= n; count++)
sum = sum + (1.0 / (count + 1) );
答案 4 :(得分:0)
你只需要使用另一种循环即do-while循环。例如
this.getSourceViewerDecorationSupport(getSourceViewer()).setSymbolicFontName(name);
而不是声明
do
{
cout << "Enter a positive integer N (<1 to stop): ";
cin >> n;
sum = 0;
for (count = 1; count <= n; count++)
sum = sum + (1.0/count);
if ( n > 0 ) cout << "Sum = " << sum << endl;
} while ( n > 0 );
cout << "Bye! ";
你应该使用声明
int n, count;
您可以检查输入是否有效。例如
unsigned int n, count;
考虑到这一点,您还可以使用以下类型的循环
if ( !( cin >> n ) || n == 0 ) break;