如何确保进入循环(C++)

How to assure the loop is entered (C++)

本文关键字:C++ 循环 确保 何确保      更新时间:2023-10-16

我的教授说 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! ";