平均 c++ 中 2 个输入文件的数据陷入循环
Averaging data from 2 input files in c++ stuck in a loop
我似乎在我的代码中的某个地方陷入了一个无限循环,但我找不到在哪里。我正在为一个班级做作业,要求我平均 2 组学生的分数(2 个输入文件)并将结果输出到 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 << "CourseIDtGroup No.tCourse Average" << endl << endl;
results << courseID1 << "t1" << avg1;
results << "tt2" << avg2 << endl << endl;
count++;
}
return 0;
} //end of main
组1.dat
A 80 100 50 10 32 90 89 100 23 50 -999
B 80 90 80 94 90 34 23 63 23 80 90 -999
C 10 30 20 10 90 50 89 23 90 68 90 10 60 90 73 35 90 -999
D 34 80 45 89 90 n23 90 12 34 90 84 100 90 59 -999
E 100 83 93 20 63 -999
组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 循环后得到这个结果
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
我该如何解决这个问题?
你的 while 语句:
while (score != -999){
k = k + 1;
sum = sum + score;
}
您永远不会修改"score"的值,从而创建一个无限循环。
您应该在右括号之前在循环中添加group1 >> score
。像这样:
group1 >> score;
while(score != -999)
{
k = k + 1;
sum = sum + score;
group1 >> score;
}
第二个循环也是如此
这看起来更好:
while( (group >> score) && score != -999 )
{
k = k + 1;
sum = sum + score;
}
while (score != -999)
{
k = k + 1;
sum = sum + score;
}
你被困在这个循环中。 仅当score == -999
并且您不在此循环中的任何位置修改 score
的值时,循环才会退出。
始终使用调试器。 你很快就会找到你的程序卡在哪里。
我想,像这样:
do
{
group1 >> score;
k = k + 1;
sum = sum + score;
} while (score != -999);
相关文章:
- 与多个 for 循环与单个 for 循环 wrt 相关的性能从多映射获取数据
- OpenMP:for 循环避免数据竞争,而无需使用关键
- 有没有办法在C++中循环访问对象的不同数据成员
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 类方法 - 数据结构中 For 循环的运行时错误
- 用于循环访问多个集合的数据结构
- 增强循环缓冲区push_back在前面插入数据
- 从文件导入数据时遇到问题.我有一个没完没了的循环
- 它不显示数据,只显示永无止境的循环
- C++:从文件中读取x y数据会产生无限循环吗
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 将结构数据存储在循环缓冲区中
- 利用输入文件中的数据(字符串和int)并在循环中利用
- boost::asio::async_read 无限循环,接收数据为零字节
- 如何使用for循环将数据保存在不同的文件中?
- C++ 数据结构队列:使用 for 循环查找队列中最大的元素
- C++ - 将数据插入到地图循环的地图中
- 输入数据类型检查循环未按预期工作 (C++)
- 如果输入变量的数据类型与以前不同,如何使我的循环仍然正常运行?
- 如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?