C++ 在c+中平均2个输入文件的数据+;陷入困境
我似乎在代码的某个地方陷入了一个无休止的循环,但我找不到哪里。我正在为一个班级做一项作业,要求我对两组学生(两个输入文件)的分数取平均值,并将结果输出到results.out。我被困在某个地方,需要知道下一步该去哪里。我已经复制了我的代码和下面的两个输入文件。到目前为止,我的results.out文件中没有任何内容 我的代码:C++ 在c+中平均2个输入文件的数据+;陷入困境,c++,loops,fstream,C++,Loops,Fstream,我似乎在代码的某个地方陷入了一个无休止的循环,但我找不到哪里。我正在为一个班级做一项作业,要求我对两组学生(两个输入文件)的分数取平均值,并将结果输出到results.out。我被困在某个地方,需要知道下一步该去哪里。我已经复制了我的代码和下面的两个输入文件。到目前为止,我的results.out文件中没有任何内容 我的代码: #include <iostream> #include <fstream> using namespace std; int main()
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char courseID1; //Course Letter
char courseID2;
int count = 1,
sum = 0,
sum2 = 0,
k = 0,
score;
ifstream group1; //Input stream for group1
ifstream group2; //Input stream for group2
ofstream results; //Output stream for the results
//Open the input files
group1.open("group1.dat");
group2.open("group2.dat");
//Open the output file
results.open("results.out");
while (count <= 5)
{
//Read the class ID
group1 >> courseID1;
group2 >> courseID2;
sum = 0;
k = 0;
group1 >> score;
while(score != -999)
{
k = k + 1;
sum = sum + score;
}
float avg1 = (float)sum/k;
k = 0;
sum2 = 0;
score = 0;
group2 >> score;
while (score != -999)
{
k = k + 1;
sum = sum + score;
}
float avg2 = (float)sum2/k;
results << "CourseID\tGroup No.\tCourse Average" << endl << endl;
results << courseID1 << "\t1" << avg1;
results << "\t\t2" << avg2 << endl << endl;
count++;
}
return 0;
} //end of main
组2.dat
A 20 75 40 25 80 89 100 60 -999
B 80 50 70 19 10 18 80 90 90 26 -999
C 100 30 20 40 90 50 18 90 90 45 90 80 70 30 35 40 -999
D 80 85 45 92 10 90 24 90 23 65 72 90 34 100 -999
E 95 100 88 98 69 -999
下面是输出应该是什么样子的:
courseID Group No. Course Average
A 1 80.50
2 82.75
B 1 78.00
2 75.35
编辑:
在将while循环更改为之后,我现在得到了这个结果
while( (group >> score) && score != -999)
我的result.out如下所示:
CourseID Group No. Course Average
A 162.4 20
CourseID Group No. Course Average
B 167.9091 20
CourseID Group No. Course Average
C 154.5882 20
CourseID Group No. Course Average
D 167.6 20
CourseID Group No. Course Average
D 1-NaN 20
group1 >> score;
while(score != -999)
{
k = k + 1;
sum = sum + score;
group1 >> score;
}
do
{
group1 >> score;
k = k + 1;
sum = sum + score;
} while (score != -999);
如何解决此问题?您的while语句:
while (score != -999){
k = k + 1;
sum = sum + score;
}
您永远不会修改“score”的值,从而创建一个无限循环
while (score != -999)
{
k = k + 1;
sum = sum + score;
}
你被困在这个圈子里了。只有当score==-999
并且您没有修改score
的值时,循环才会退出
始终使用调试器。你会很快找到你的程序卡住的地方。在结束括号之前,你应该在循环中添加
group1>>分数。大概是这样的:
CourseID Group No. Course Average
A 162.4 20
CourseID Group No. Course Average
B 167.9091 20
CourseID Group No. Course Average
C 154.5882 20
CourseID Group No. Course Average
D 167.6 20
CourseID Group No. Course Average
D 1-NaN 20
group1 >> score;
while(score != -999)
{
k = k + 1;
sum = sum + score;
group1 >> score;
}
do
{
group1 >> score;
k = k + 1;
sum = sum + score;
} while (score != -999);
第二个循环也是一样
这看起来更好:
while( (group >> score) && score != -999 )
{
k = k + 1;
sum = sum + score;
}
我猜是这样的:
CourseID Group No. Course Average
A 162.4 20
CourseID Group No. Course Average
B 167.9091 20
CourseID Group No. Course Average
C 154.5882 20
CourseID Group No. Course Average
D 167.6 20
CourseID Group No. Course Average
D 1-NaN 20
group1 >> score;
while(score != -999)
{
k = k + 1;
sum = sum + score;
group1 >> score;
}
do
{
group1 >> score;
k = k + 1;
sum = sum + score;
} while (score != -999);
你试过调试器吗?我现在得到的结果是这样的:CourseID组号,课程平均a 162.4 20 CourseID组号,课程平均B 167.9091 20 CourseID组号,课程平均C 154.5882 20 CourseID组号,课程平均D 167.6 20 CourseID组号,课程平均D 1-NaN 20不仅你的第二个建议看起来更好,实际上是正确的。第一个建议(就像他的代码中的所有内容一样)使用>
的结果,而不检查它是否成功。这意味着输入中最轻微的错误(例如,一个'O'
而不是一个'0'
)也会使代码进入一个无休止的循环。你说它实际上是正确的评论让我明白了这一点。非常感谢你。