C++从txt中读取的问题 如何多行读取?
enumstatus{FT,PT};voidReadFile(){fstreamin("students.txt");if(!in.good())cout<<"Cantf...
enum status {FT,PT};
void ReadFile()
{
fstream in("students.txt");
if(!in.good())
cout<< "Cant find data file!\n";
int i = 0;
in>>gRecs[i].StudentNo;
in>>gRecs[i].FamilyName;
in>>gRecs[i].FirstName;
char temp[3];
in >> temp;
switch (temp[0])
{
case 'F':
gRecs[i].a=FT;
for(int j=0;j<=4;j++)
{
in >> gRecs[i].Subject[j];
}
break;
case 'P':
gRecs[i].a=PT;
for(int j=0;j<=2;j++)
{
in >> gRecs[i].Subject[j];
}
break;
}
}
为什么只可以读txt里面的一行?怎么读多行?比如:
91711912
Cook
Mary
FT
MATH112 46
ELEC113 53
CSCI102 79
IACT114 48
38473517
Grey
Jim
PT
IACT114 56
ELEC113 75
这是一个txt文件 FT,PT是full time ,part time
下面MATH112像这样的是学科。旁边是分数
full time有4们学科 part time有2门
如何用C++统计有多少个学生?
问题补充:第一行是学号,Cook这些是名字
FT,PT是full time ,part time
下面MATH112像这样的是学科。旁边是分数
full time有4们学科 part time有2门
如何用C++统计有多少个学生? 展开
void ReadFile()
{
fstream in("students.txt");
if(!in.good())
cout<< "Cant find data file!\n";
int i = 0;
in>>gRecs[i].StudentNo;
in>>gRecs[i].FamilyName;
in>>gRecs[i].FirstName;
char temp[3];
in >> temp;
switch (temp[0])
{
case 'F':
gRecs[i].a=FT;
for(int j=0;j<=4;j++)
{
in >> gRecs[i].Subject[j];
}
break;
case 'P':
gRecs[i].a=PT;
for(int j=0;j<=2;j++)
{
in >> gRecs[i].Subject[j];
}
break;
}
}
为什么只可以读txt里面的一行?怎么读多行?比如:
91711912
Cook
Mary
FT
MATH112 46
ELEC113 53
CSCI102 79
IACT114 48
38473517
Grey
Jim
PT
IACT114 56
ELEC113 75
这是一个txt文件 FT,PT是full time ,part time
下面MATH112像这样的是学科。旁边是分数
full time有4们学科 part time有2门
如何用C++统计有多少个学生?
问题补充:第一行是学号,Cook这些是名字
FT,PT是full time ,part time
下面MATH112像这样的是学科。旁边是分数
full time有4们学科 part time有2门
如何用C++统计有多少个学生? 展开
3个回答
展开全部
无论读写都要包含<fstream>头文件
读:从外部文件中将数据读到程序中来处理
对于程序来说,是从外部读入数据,因此定义输入流,即定义输入流对象:ifsteam infile,infile就是输入流对象。
这个对象当中存放即将从文件读入的数据流。假设有名字为myfile.txt的文件,存有两行数字数据,具体方法:
int a,b;
ifstream infile;
infile.open("myfile.txt"); //注意文件的路径
infile>>a>>b; //两行数据可以连续读出到变量里
infile.close()
如果是个很大的多行存储的文本型文件可以这么读:
char buf[1024]; //临时保存读取出来的文件内容
string message;
ifstream infile;
infile.open("myfile.js");
if(infile.is_open()) //文件打开成功,说明曾经写入过东西
{
while(infile.good() && !infile.eof())
{
memset(buf,0,1024);
infile.getline(buf,1204);
message = buf;
...... //这里可能对message做一些操作
cout<<message<<endl;
}
infile.close();
}
写:将程序中处理后的数据写到文件当中
对程序来说是将数据写出去,即数据离开程序,因此定义输出流对象ofstream outfile,outfile就是输出流对象,这个对象用来存放将要写到文件当中的数据。具体做法:
ofstream outfile;
outfile.open("myfile.bat"); //myfile.bat是存放数据的文件名
if(outfile.is_open())
{
outfile<<message<<endl; //message是程序中处理的数据
outfile.close();
}
else
{
cout<<"不能打开文件!"<<endl;
}
c++对文件的读写操作的例子
/*/从键盘读入一行字符,把其中的字母依次放在磁盘文件fa2.dat中,再把它从磁盘文件读入程序,
将其中的小写字母改成大写字母,再存入磁盘fa3.dat中*/
#i nclude<fstream>
#i nclude<iostream>
#i nclude<cmath>
using namespace std;
//////////////从键盘上读取字符的函数
void read_save(){
char c[80];
ofstream outfile("f1.dat");//以输出方工打开文件
if(!outfile){
cerr<<"open error!"<<endl;//注意是用的是cerr
exit(1);
}
cin.getline(c,80);//从键盘读入一行字符
for(int i=0;c[i]!=0;i++) //对字符一个一个的处理,直到遇到'/0'为止
if(c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122){//保证输入的字符是字符
outfile.put(c[i]);//将字母字符存入磁盘文件
cout<<c[i]<<"";
}
cout<<endl;
outfile.close();
}
void creat_data(){
char ch;
ifstream infile("f1.dat",ios::in);//以输入的方式打开文件
if(!infile){
cerr<<"open error!"<<endl;
exit(1);
}
ofstream outfile("f3.dat");//定义输出流f3.dat文件
if(!outfile){
cerr<<"open error!"<<endl;
exit(1);
}
while(infile.get(ch)){//当读取字符成功时
if(ch<=122&&ch>=97)
ch=ch-32;
outfile.put(ch);
cout<<ch;
}
cout<<endl;
infile.close();
outfile.close();
}
int main(){
read_save();
creat_data();
system("pause");
return 0;
}
读:从外部文件中将数据读到程序中来处理
对于程序来说,是从外部读入数据,因此定义输入流,即定义输入流对象:ifsteam infile,infile就是输入流对象。
这个对象当中存放即将从文件读入的数据流。假设有名字为myfile.txt的文件,存有两行数字数据,具体方法:
int a,b;
ifstream infile;
infile.open("myfile.txt"); //注意文件的路径
infile>>a>>b; //两行数据可以连续读出到变量里
infile.close()
如果是个很大的多行存储的文本型文件可以这么读:
char buf[1024]; //临时保存读取出来的文件内容
string message;
ifstream infile;
infile.open("myfile.js");
if(infile.is_open()) //文件打开成功,说明曾经写入过东西
{
while(infile.good() && !infile.eof())
{
memset(buf,0,1024);
infile.getline(buf,1204);
message = buf;
...... //这里可能对message做一些操作
cout<<message<<endl;
}
infile.close();
}
写:将程序中处理后的数据写到文件当中
对程序来说是将数据写出去,即数据离开程序,因此定义输出流对象ofstream outfile,outfile就是输出流对象,这个对象用来存放将要写到文件当中的数据。具体做法:
ofstream outfile;
outfile.open("myfile.bat"); //myfile.bat是存放数据的文件名
if(outfile.is_open())
{
outfile<<message<<endl; //message是程序中处理的数据
outfile.close();
}
else
{
cout<<"不能打开文件!"<<endl;
}
c++对文件的读写操作的例子
/*/从键盘读入一行字符,把其中的字母依次放在磁盘文件fa2.dat中,再把它从磁盘文件读入程序,
将其中的小写字母改成大写字母,再存入磁盘fa3.dat中*/
#i nclude<fstream>
#i nclude<iostream>
#i nclude<cmath>
using namespace std;
//////////////从键盘上读取字符的函数
void read_save(){
char c[80];
ofstream outfile("f1.dat");//以输出方工打开文件
if(!outfile){
cerr<<"open error!"<<endl;//注意是用的是cerr
exit(1);
}
cin.getline(c,80);//从键盘读入一行字符
for(int i=0;c[i]!=0;i++) //对字符一个一个的处理,直到遇到'/0'为止
if(c[i]>=65&&c[i]<=90||c[i]>=97&&c[i]<=122){//保证输入的字符是字符
outfile.put(c[i]);//将字母字符存入磁盘文件
cout<<c[i]<<"";
}
cout<<endl;
outfile.close();
}
void creat_data(){
char ch;
ifstream infile("f1.dat",ios::in);//以输入的方式打开文件
if(!infile){
cerr<<"open error!"<<endl;
exit(1);
}
ofstream outfile("f3.dat");//定义输出流f3.dat文件
if(!outfile){
cerr<<"open error!"<<endl;
exit(1);
}
while(infile.get(ch)){//当读取字符成功时
if(ch<=122&&ch>=97)
ch=ch-32;
outfile.put(ch);
cout<<ch;
}
cout<<endl;
infile.close();
outfile.close();
}
int main(){
read_save();
creat_data();
system("pause");
return 0;
}
展开全部
fread函数用来从指定文件读一个数据块,例如读一个实数或一个结构体变量的值,该函数的一般格式为:
fread(buffer, size, count, 文件指针变量)
buffer是读入数据在内存中的存放地址。
size是要读的数据块的字节数。
count是要读多少个size字节的数据项。
fread函数的作用是从文件指针变量指向的文件中读count个长度为size的数据项到buffer所指的地址中。该函数如果调用成功返回实际读入数据块的个数,如果读入数据块的个数小于要求的字节数,说明读到了文件尾或出错。
#include "stdio.h"
#include "stdlib.h"
struct student /*定义结构体*/
{ char sname[8]; /*姓名*/
char sgen[2]; /*性别*/
int sage; /*年龄*/
}stu1[3],stu2[3];
int main( )
{
inti;
FILE*fp; /*定义文件指针变量*/
fp=fopen("student.stu","wb"); /*只写方式打开文件*/
if(fp==NULL) /*打开失败后退出*/
{ printf("写文件打开失败!");
exit(0);
}
for(i=0;i<3;i++)
{
scanf("%s%s %d",&stu1[i].sname,&stu1[i].sgen,&stu1[i].sage);
}
fwrite(&stu1,sizeof(student),3,fp);
printf("三个学生的基本信息(姓名、性别、年龄):\n");
for(i=0;i<3;i++)
{ printf("%s %s%d\n",stu1[i].sname,stu1[i].sgen,stu1[i].sage);
}
fclose(fp);
fp=fopen("student.stu","rb"); /*只读方式打开文件*/
if(fp==NULL) /*打开失败后退出*/
{ printf("文件打开失败!");
exit(0);
}
fread(&stu2,sizeof(student),3,fp); /*读数据到数组变量*/
printf("您刚才输入的数据为:\n");
for(i=0;i<3;i++)
{ printf("%s %s%d\n",stu2[i].sname,stu2[i].sgen,stu2[i].sage);
}
fclose(fp); /*关闭文件*/
return 0;
}
fread(buffer, size, count, 文件指针变量)
buffer是读入数据在内存中的存放地址。
size是要读的数据块的字节数。
count是要读多少个size字节的数据项。
fread函数的作用是从文件指针变量指向的文件中读count个长度为size的数据项到buffer所指的地址中。该函数如果调用成功返回实际读入数据块的个数,如果读入数据块的个数小于要求的字节数,说明读到了文件尾或出错。
#include "stdio.h"
#include "stdlib.h"
struct student /*定义结构体*/
{ char sname[8]; /*姓名*/
char sgen[2]; /*性别*/
int sage; /*年龄*/
}stu1[3],stu2[3];
int main( )
{
inti;
FILE*fp; /*定义文件指针变量*/
fp=fopen("student.stu","wb"); /*只写方式打开文件*/
if(fp==NULL) /*打开失败后退出*/
{ printf("写文件打开失败!");
exit(0);
}
for(i=0;i<3;i++)
{
scanf("%s%s %d",&stu1[i].sname,&stu1[i].sgen,&stu1[i].sage);
}
fwrite(&stu1,sizeof(student),3,fp);
printf("三个学生的基本信息(姓名、性别、年龄):\n");
for(i=0;i<3;i++)
{ printf("%s %s%d\n",stu1[i].sname,stu1[i].sgen,stu1[i].sage);
}
fclose(fp);
fp=fopen("student.stu","rb"); /*只读方式打开文件*/
if(fp==NULL) /*打开失败后退出*/
{ printf("文件打开失败!");
exit(0);
}
fread(&stu2,sizeof(student),3,fp); /*读数据到数组变量*/
printf("您刚才输入的数据为:\n");
for(i=0;i<3;i++)
{ printf("%s %s%d\n",stu2[i].sname,stu2[i].sgen,stu2[i].sage);
}
fclose(fp); /*关闭文件*/
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那个,你的提问真的好乱啊,要把*.txt中的文本全读完的话,可以用一个
while(!in.eof())
{
//写入你的代码
} //当是文本末in.eof()返回TRUE;
循环 看看是否到达了文本末就可以全部读完;
如果你的学号有规律的话,可以读入后判断 定义个变量,然后是学生的话就+1;不懂可以+641473012
while(!in.eof())
{
//写入你的代码
} //当是文本末in.eof()返回TRUE;
循环 看看是否到达了文本末就可以全部读完;
如果你的学号有规律的话,可以读入后判断 定义个变量,然后是学生的话就+1;不懂可以+641473012
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询