首页 > 解决方案 > 要求用户输入学生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");

标签: c++

解决方案


您的循环条件错误。假设一次迭代发现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,不评估其余条件。


推荐阅读