c++ - 要求用户输入学生ID。然后您将打开文本文件并搜索此 ID。(C++)
问题描述
对此非常努力,我需要在文本文件中输入一个 ID 号并输出文本文件同一行上的相关成绩
这是我的代码,它打印正确的平均值,但它打印下一个 ID 编号的测试分数
int searchID;
int studentID;
bool found = false;
double exam_1;
double exam_2;
double exam_3;
double average = 0;
cout << "Enter student ID to search in file " <<
fileName << " : ";
//read searchID value
cin >> searchID;
//read data from file until the search id is found
while (fin >> studentID >> exam_1 >> exam_2
>> exam_3 && !found)
{
if (searchID == studentID)
{
average = (exam_1 + exam_2 + exam_3) / 3.0;
found = true;
}
}
//close the file stream,fin
fin.close();
//check if search id is found
if (found)
{
cout << left << setw(10) << "Exam 1" << setw(10) << exam_1 << endl;
cout << left << setw(10) << "Exam 2" << setw(10) << exam_2 << endl;
cout << left << setw(10) << "Exam 3" << setw(10) << exam_3 << endl;
cout << fixed << setprecision(2)
<< "Average : " << average << endl;
}
else
cout << searchID << " student id is not found." << endl;
system("pause");
解决方案
您的循环条件错误。假设一次迭代发现ID
,found
设置为 true,然后在下一次迭代中评估条件:
while (fin >> studentID >> exam_1 >> exam_2 >> exam_3 && !found)
无论found
您读取文件中的下一个条目的值是什么。将其更改为
while (!found && fin >> studentID >> exam_1 >> exam_2 >> exam_3)
&&
短路,即当!found
是时false
,不评估其余条件。
推荐阅读
- javascript - jsx中的函数映射反应本机
- swift - 如何扩展 Decodable 以从字典初始化?
- python - 蟒蛇重新。排除一些结果
- python - Twisted 服务器/客户端之间的多个调用/响应消息
- cqrs - 在 cqrs 中投影期间处理数据库故障
- r - 如何在闪亮的盒子内制作高宪章时间序列图?
- javascript - 如何在 Vue 工作流程(Vanilla Bootstrap)中覆盖 Bootstrap 变量?
- django - 具有 CMS 功能的 Django 管理员
- c# - 'Npgsql.PostgresException' 类型的第一次机会异常
- django - 存储具有相关模型的对象会导致 IntegrityError:空值违反非空约束