значения пропускаются или читаются дважды при чтении файла - PullRequest
0 голосов
/ 15 января 2020

Смысл этой программы - записать в файл имя, отчество, фамилию и результаты теста учащегося, и если его оценка составляет от 40 до 50 баллов, он должен вывести их имена. Однако он пропускает имена некоторых учеников или выводит их дважды. пример: вход: n = 2

Джон Джонс Джеймсон 41

Джордж Петерсон Харрисон 51

выход: нет

вход: 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;
}

1 Ответ

0 голосов
/ 15 января 2020

Я изменил имена, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...