读取文件时跳过或读取两次值
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
这个程序的重点是将学生的名字、中间名、姓氏和考试成绩写入文件,如果他们的成绩在 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