I have a homework problem here I’ve been working on; here is the description:
Write a program that reads a file consisting of students’ test scores in the
range 0–200. It should then determine the number of students having
scores in each of the following ranges: 0–24, 25–49, 50–74, 75–99,
100–124, 125–149, 150–174, and 175–200. Output the score ranges
and the number of students. (Run your program with the following input
data: 76, 89, 150, 135, 200, 76, 12, 100, 150, 28, 178, 189, 167, 200,
175, 150, 87, 99, 129, 149, 176, 200, 87, 35, 157, 189.)
The following is the program I have made:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
//declaring variables
ifstream myfile("data.txt");
double grades[26];
int i, studentNumber=0;
int score0_24=0, score25_49=0, score50_74=0,
score75_99=0, score100_124=0, score125_149=0,
score150_174=0, score175_200=0;
cout << score150_174 << endl;
//initializing grades array
for(i=0; i<26; i++)
{
grades[i] = 0;
cout << grades[i] << " ";
}
//getting data from text file
for(i=0; i<26; i++)
{
myfile >> grades[i];
cin.ignore(2);
studentNumber++;
}
myfile.close();
//finding number of people for each score range
for(i=0; i<26; i++)
{
if(grades[i] <= 24)
score0_24++;
if(grades[i] >= 25 && grades[i] <= 49)
score25_49++;
if(grades[i] >= 50 && grades[i] <= 74)
score50_74++;
if(grades[i] >= 75 && grades[i] <= 99)
score75_99++;
if(grades[i] >= 100 && grades[i] <= 124)
score100_124++;
if(grades[i] >= 125 && grades[i] <= 149)
score125_149++;
if(grades[i] >= 150 && grades[i] <= 174)
score150_174++;
if(grades[i] >= 175 && grades[i] <= 200)
score175_200++;
}
//outputing results
cout << "Number of students: " << studentNumber << endl;
cout << "0-24: " << score0_24 << endl;
cout << "25-49: " << score25_49 << endl;
cout << "50-74: " << score50_74 << endl;
cout << "75-99: " << score75_99 << endl;
cout << "100-124: " << score100_124 << endl;
cout << "125-149: " << score125_149 << endl;
cout << "150-174: " << score150_174 << endl;
cout << "175-200: " << score175_200 << endl;
return 0;
}
And the file I have, which is in the same folder as this project, is called:
data.txt
And contains the following:
76, 89, 150, 135, 200, 76, 12, 100, 150, 28, 178, 189, 167, 200, 175, 150, 87, 99, 129, 149, 176, 200, 87, 35, 157, 189
When I run the program, it suspends during the for loop where I read data from the file. I’ve tried doing some cout statements right before and after, and it seems that is the problem.
Help would be appreciated.
I have a few recommendations for you, though you didn’t ask :)…
1) Instead of collecting the grades first and then processing them, combine your loops into 1 so as soon as you read the value you do something with it. This removes the need to have your
gradesarray and about half your code.2) Instead of hard-coding 26 grades, read from the file until you’re at the end:
3) Instead of creating 8 counters for 0-24, 25-49, etc, create an array of 8 and use integer math to figure out what index to access.
With those changes you should be able to get this down to 15-20 lines of clean readable code.