for循环内的变量不会随每个循环而增加,创建的文件为空

时间:2019-04-22 04:40:27

标签: c++

对于一个类分配,我们必须做一个“人口估算器”,我们使用腻子存储和编译我们的项目,因此该程序创建的文件就在那里。

这是作业的细节。

  

在人口中,出生率是指   出生人口,死亡率是百分比   因死亡人数减少。编写一个询问   对于以下内容:

    The starting size of a population (minimum 2)
    The annual birth rate
    The annual death rate
    The number of years to display (minimum 1)
     

然后,程序应显示起始人口和   每年年底在屏幕和文件中的预计人口。   它应该使用一个函数来计算并返回预计的新   一年后的人口规模。公式为N = P(1 + B)(1-D)   其中:

    N is the new population size,
    P is the previous population size,
    B is the birth rate,
    and D is the death rate.
     

年出生率和死亡率是典型的出生人数,   每千人一年中的死亡人数,以小数表示。因此对于   例如,如果通常每千人中大约有32例出生和26例死亡   给定人口中的人口,出生率将为.032,而   死亡率是.026。

我的程序在运行时确实会创建文件,但程序完成后其中没有任何内容。 for循环不会增加年份值,并且总体数量保持不变,这是我的代码。希望我能有所帮助。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
    //N is the new population size.
    //B is the birth rate.
    //D is the death rate.
    //P is the previous population size;

    fstream File;

    double b, d;
    int p, pp, n, yrs;

    cout << "Population Estimator" << endl;

    cout << "Enter the starting size of the population: ";
    cin >> p;
    cout << endl;

    while (pp <= 2) 
    {
        cout << "Population must be 2 or more, enter again: ";
        cin >> pp;
        cout << endl;
    }

    cout << "Enter the Annual Birth Rate: ";
    cin >> b;
    b = b * p/1000;
    cout << endl;

    cout << "Enter the Annual Death Rate: ";
    cin >> d;
    d = d * p/1000;
    cout << endl;

    cout << "Enter the number of Years: ";
    cin >> yrs;
    cout << endl;

    while (yrs <= 1) 
    {
        cout << "Years must be 1 or more, enter again: ";
        cin >> yrs;
        cout << endl;
    }

    n = pp * 1+b * 1-d;

    int year = 0;

    fstream file("population.txt");

    for (int counter = 1; counter <= yrs; counter++)
    {
        year + 1;
        n * year;

        File << "Year # " << year << " the population was at: " << pp << " and will be at: " << n << " by the end of the year." << endl;
        cout << "Year # " << year << " the population was at: " << pp << " and will be at: " << n << " by the end of the year." << endl;

        pp = n;
    }

    File.close();

    return 0;
}

1 个答案:

答案 0 :(得分:2)

陈述如下:

year + 1;
n * year;

是完全有效的C或C ++,但是它们的作用是计算值,然后将其丢弃。顺便说一句,这些与42;(也很有效)没有什么不同。

假设您要更改这些变量,则应使用类似的东西(右边的注释是简写形式):

year = year + 1;   // ++year;
n = n * year;      // n *= year

您的文件为空的原因是因为您没有向其中写入任何内容。检查用于文件I / O的所有语句:

fstream File;
fstream file("population.txt");
File << blah blah blah;
File.close();

您会看到File文件(大写F)使用默认构造函数,这意味着它没有附加到任何实际文件中,并且 this 是一个您正在尝试写入。

您的小写file文件是您附加到population.txt的文件,但实际上您从未写过任何文件。

您应该选择一个文件句柄并坚持使用:-)


另一个问题:您的第一个while循环可能应该使用p而不是pp(对n的初始赋值)。这是要检查初始人口,而不是尚未分配的先前人口。

另外,while循环应使用<而不是<=,因为后者意味着即使规范指出“人口的起始规模(至少2, )”。