读取文件时跳过或读取两次值

values skipped or read twice when reading file

这个程序的重点是将学生的名字、中间名、姓氏和考试成绩写入文件,如果他们的成绩在 40 到 50 分之间,则必须输出他们的名字。但是,它会跳过某些学生的姓名或将其输出两次。 例子: 输入:n=2

乔恩 琼斯 詹姆逊 41

乔治 彼得森 哈里森 51

输出:none

输入:n=2 乔恩 琼斯 詹姆逊 49

乔治 彼得森 哈里森 43

输出: 乔治 彼得森 哈里森 乔治 彼得森 哈里森

这是我的代码:

#include <iostream>
#include <fstream>
using namespace std;
struct Student{
char first_name[20];
char second_name[20];
char last_name[20];
double score;
};
int main(){
Student students;
fstream file;
file.open("c:/students.txt",ios::in);
int n,i;
cout<<"n:";
cin>>n;
for(i=0;i<n;i++ ){
    cout<<"First name: ";
    cin>>students.first_name;
    cout<<"Second name: ";
    cin>>students.second_name;
    cout<<"Last name: ";
    cin>>students.last_name;
    cout<<"Score: ";
    cin>>students.sr_uspeh;
    file<<students.first_name<<" ";
    file<<students.second_name<<" ";
    file<<students.last_name<<" ";
    file<<students.score<<" ";

}
file.seekg(0);
for(int i=0;i<n;i++){
    file>>students.first_name;
    file>>students.second_name;
    file>>students.last_name;
    file>>students.score;
    if(students.score>=40 && students.sr_uspeh<=50){
        cout<<students.first_name<<" ";
        cout<<students.second_name<<" ";
        cout<<students.last_name<<endl;
    }

}
file.close();
return 0;
}

我更改了名称,ios::in | ios::out 和一些格式,然后代码可以正常工作

#include <iostream>
#include <fstream>
using namespace std;
struct Student{
    char first_name[20];
    char second_name[20];
    char last_name[20];
    double score;
};
int main(){

    Student student;
    fstream file;
    file.open("fileName.txt",ios::in|ios::out);//You will input and output
    int n;
    cout<<"n:";
    cin>>n;

    for(int i=0;i<n;i++ ){
        cout<<"\nFirst name: ";
        cin>>student.first_name;
        cout<<"\nSecond name: ";
        cin>>student.second_name;
        cout<<"\nLast name: ";
        cin>>student.last_name;
        cout<<"\nScore: ";
        cin>>student.score;

        cout<<"\nI got you inputs and I'm processing them.\n";

        file<<student.first_name<<" ";
        file<<student.second_name<<" ";
        file<<student.last_name<<" ";
        file<<student.score<<"\n";

    }

    file.seekg(0);

    for(int i=0;i<n;i++){
        file>>student.first_name;
        file>>student.second_name;
        file>>student.last_name;
        file>>student.score;

        if(student.score>=40 && student.score<=50){
            cout<<student.first_name<<" ";
            cout<<student.second_name<<" ";
            cout<<student.last_name<<endl;
        }

    }

    file.close();

return 0;
}

输入 n->4 然后

name1 Jones Jameson 41
name2 Peterson Harrison 51
name3 Jones Jameson 49
name4 Peterson Harrison 43

输出为

I got you inputs and I'm processing them.
name1 Jones Jameson
name3 Jones Jameson
name4 Peterson Harriso