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

时间:2016-01-22 17:05:07

标签: 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;
}

5 个答案:

答案 0 :(得分:4)

以下是宣布n的行

int n, count;

在这种情况下,n的值为unspecified as it is left uninitialized。你应该初始化它

int n = 1;

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