我在这里做作业问题我一直在努力;这是描述:
编写一个程序,读取一个由学生的考试成绩组成的文件 范围0-200。然后应该确定学生的数量 以下每个范围内的得分:0-24,25-49,50-74,75-99, 100-124,125-149,150-174和175-200。输出得分范围 和学生人数。 (使用以下输入运行程序 数据: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。)
以下是我制作的节目:
#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;
}
我所拥有的文件与该项目位于同一文件夹中,名为:
data.txt中
并包含以下内容:
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
当我运行程序时,它会在for循环中挂起,我从文件中读取数据。我之前和之后都尝试过做一些cout语句,似乎问题就出现了。
帮助将不胜感激。
答案 0 :(得分:0)
我有一些建议给你,虽然你没有问过:)......
1)不要先收集等级然后再处理它们,而是将你的循环合并为1,这样一旦你读到了你用它做的事情的价值。这样就无需使用grades
数组和大约一半的代码。
2)不要硬编码26个等级,而是从文件中读取,直到最后:
for(int grade = 0; myFile >> grade; )
{
if(myFile.peek() == ',')
myFile.ignore(); // <--- this is why your version wasn't working (you were calling cin.ignore instead)
// do something with grade here
}
3)不是为0-24,25-49等创建8个计数器,而是创建一个8的数组,并使用整数数学来确定要访问的索引。
通过这些更改,您应该能够将其降低到15-20行干净的可读代码。
答案 1 :(得分:0)
**File to read in named test.txt located @ c:\\users\\desktop\\test.txt**
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
----------------------------------------------------------
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream infile;
int scores[26] = { 0 };
int scoreCount[8] = { 0 };
infile.open("c:\\users\\desktop\\test.txt");
if (infile)
for (int i= 0; i < 26; i++) { //read file txt into scores array
infile >> scores[i];
if (!infile)
break; }
for (int i = 0; i <= scores[i]; i++) { //index score count into scoreCount array
int index = scores[i] / 25;
if (index >= 0 && index < 8)
scoreCount[index]++;
else if (scores[i] == 200)
scoreCount[7]++; }
int min = 0;
int max = 24;
for (int i = 0; i < 8; i++) { //print ranges & score count
cout << min << " - " << max << " ";
cout << scoreCount[i];
cout << endl;
min += 25;
max += 25;
if (max == 199) max = 200; }
infile.close();
return 0;
}