0

现在我正在尝试编写一个程序,该程序可以接受一个包含一堆整数的输入文件,然后显示特定范围内的数字数量。例如:

如果输入文件有 20, 30, 40, 50, 60. 范围是 1-20, 21-40, 41-60

输出将是

1-20:1 21-40:2 41-60:3

等等

我是编程新手,所以我的代码有一点问题,我知道我很接近。我使用数组来存储它们,但我不确定如何制作一个适应文件中有多少整数的数组。所以这就是我到目前为止所得到的。(只是为了这个练习,我试图使数组存储 100 个整数的最大数量)。

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;

int ranges(int);


int main()
{
ifstream indata;
ofstream outdata;

indata.open("scores1.txt");

outdata.open("scoresoutput.txt");

if(!indata)
{
    cout << "Unable to open file" << endl;
    return 1;
}

int range1=0;
int range2=0;
int range3=0;
int range4=0;
int range5=0;
int range6=0;
int range7=0;
int range8=0;


const int max=100;
int score[max];



while(indata)
{

    for(int i=0; i < max ; i++)
    {

    indata >> score[i];
    indata.ignore(1);

    if(0 <= score[i] <= 24)
            {
            range1++;
            }

            else if(25 <= score[i] <= 49)
            {
                range2++;
            }

            else if(50 <= score[i] <=74)
            {
                range3++;
            }

            else if(75<= score[i] <= 99)
            {
                range4++;
            }

            else if(100 <= score[i] <= 124)
            {
                range5++;
            }

            else if(125 <= score[i] <= 149)
            {
                range6++;
            }

            else if(150 <= score[i] <= 174)
            {
                range7++;
            }

            else if(175 <= score[i]<= 200)
            {
                range8++;
            }


    }

        }



outdata << "Range" << setw(10) << "Number of Students" << endl <<
    "0-24" << setw(10) << range1 << endl<<
    "25-49" << setw(10) << range2 << endl <<
    "50-74" << setw(10) << range3 << endl <<
    "75-99" << setw(10) << range4 << endl <<
    "100-124" << setw(10) << range5 << endl <<
    "125-149" << setw(10) << range6 << endl <<
    "150-174" << setw(10) << range7 << endl <<
    "175-200" << setw(10) << range8 << endl;


return 0;

}

现在,输出只显示 0-24 100。有什么比我现在做的更简单的方法吗?

4

1 回答 1

0

Array 是你的好朋友。尝试使用数组来管理计数:

int range_count[8];
for (int i = 0; i < 8; ++i) {
  range_count[i] = 0;
}

在你的while循环内的for循环中:

for(int i = 0; i < max ; ++i) {

  indata >> score[i];
  indata.ignore(1);

  if (score[i] >= 0 && score[i] <= 200) {
    range_count[score[i] / 25]++; // since your range intervals is a constant 25.
  }
}

最后,在输出中:

outdata << "Range" << setw(10) << "Number of Students" << endl;
for (int i = 0; i < 8; ++i) {
  i * 25 << "-" << i * 25 + 24 << setw(10) << range_count[i] << endl;
}
于 2013-06-11T01:59:51.973 回答