C++ 在c+中平均2个输入文件的数据+;陷入困境

C++ 在c+中平均2个输入文件的数据+;陷入困境,c++,loops,fstream,C++,Loops,Fstream,我似乎在代码的某个地方陷入了一个无休止的循环,但我找不到哪里。我正在为一个班级做一项作业,要求我对两组学生(两个输入文件)的分数取平均值,并将结果输出到results.out。我被困在某个地方,需要知道下一步该去哪里。我已经复制了我的代码和下面的两个输入文件。到目前为止,我的results.out文件中没有任何内容 我的代码: #include <iostream> #include <fstream> using namespace std; int main()

我似乎在代码的某个地方陷入了一个无休止的循环,但我找不到哪里。我正在为一个班级做一项作业,要求我对两组学生(两个输入文件)的分数取平均值,并将结果输出到results.out。我被困在某个地方,需要知道下一步该去哪里。我已经复制了我的代码和下面的两个输入文件。到目前为止,我的results.out文件中没有任何内容

我的代码:

#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'
)也会使代码进入一个无休止的循环。你说它实际上是正确的评论让我明白了这一点。非常感谢你。