如何确保进入循环(C++)
How to assure the loop is entered (C++)
我的教授说 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;
}
这是声明n
的行
int n, count;
在这种情况下,未指定 n
的值,因为它未初始化。你应该初始化它
int n = 1;
如果你总是希望一个循环至少运行一次,那么你需要一个do...while();
循环。 它将始终在第一次迭代时进入循环并执行循环体,然后它将检查 while 条件以确定它是再次循环还是退出。 do...while();
具有以下形式:
do
{
statements
} while (condition);
在这种情况下,它将使您不必在从用户那里获得输入之前初始化n
。
在这种情况下,这似乎并不完全是您想要的,因为如果用户输入的数字小于 1,您不希望任何事情发生。 您可以解决这个问题的一种方法是将输出和输入与检查n
一起放入 while 循环中。 如果用户输入小于 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;
}
问题是n
尚未初始化。与Java或C#等其他语言不同,原始变量没有任何预定义的"默认"值。简单地占用以前存在的任何堆栈空间;对于所有意图和目的,未初始化变量的默认值可以被视为"随机"。
要解决此问题,只需在进入循环之前初始化变量即可。
n = 1;
将 n 设置为大于或等于 1 的值,以便保证循环进入。由于不是您自己设置的,因此默认值可以是小于 1 的值,这意味着外观有机会触发,但不能保证触发。
int n = 1
此外,您应该在 for 循环中设置 count = 0,因为如果 n 和 count 彼此相等,for 循环会自动中断并且根本不执行,总和为 0。
要确保除以 0,请将计数设置为 count + 1。
for (count = 0; count <= n; count++)
sum = sum + (1.0 / (count + 1) );
你只需要使用另一种循环,即do-while循环。例如
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;
考虑到这一点,您还可以使用以下类型的循环
while ( true )
{
cout << "Enter a positive integer N (<1 to stop): ";
unsigned int n;
cin >> n;
if ( !( cin >> n ) || n == 0 ) break;
sum = 0;
for (unsigned int count = 1; count <= n; count++)
sum = sum + (1.0/count);
if ( n > 0 ) cout << "Sum = " << sum << endl;
}
cout << "Bye! ";
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在循环C++中指定字符串之后,不会打印该字符串