C++从txt中读取的问题 如何多行读取?

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++统计有多少个学生?

无论读写都要包含<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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-02-16
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;
}
第2个回答  2010-08-18
那个,你的提问真的好乱啊,要把*.txt中的文本全读完的话,可以用一个
while(!in.eof())

//写入你的代码
} //当是文本末in.eof()返回TRUE;
循环 看看是否到达了文本末就可以全部读完;

如果你的学号有规律的话,可以读入后判断 定义个变量,然后是学生的话就+1;不懂可以+641473012

C++中如何读入多行数据?
你既然要文本多行读入可以这样写:include<fstream> freopen("unname.txt","r",stdin); \/\/input freopen("unname_out.txt","w",stdout); \/\/output 然后按一般的读入就可以了.EOF一般用来判断文本结束, 不过C里自带检测的函数,可以这样使用:while(!feof(stdin)){ ...} \/\/其中stdin是标...

如何用C++对一个文本文档里面的许多数据进行逐行读取,并放入数组中
推荐使用文件流来读取。如果你的数据是用空格、制表符和换行符来分隔的,那么程序可以写的很简单。直接逐行用fin就可以了。如果你的数据是用逗号或者其他字符来分隔,用换行来分行的,那么你需要在循环中写入两次读入,第一次用于读入数据,第二次用于跳过字符。如果数据中间的分隔字符是不规范、不一致、...

c++如何读取txt的数据(一行一行的读,从第一行读到最后一行)要详细代 ...
C++读取txt文本数据并一行一行的读方法如下:1、使用C++提供输入输出流的getline函数可以实现整行读取;完整代码如下:include<iostream>#include<fstream>using namespace std;int main(){ \/\/ 定义输入文件流类对象infileifstream infile("test.txt",ios::in);if(!infile){ \/\/ 判断文件是否存在 ce...

c语言 读写文件时怎么样一次读取几行,然后再几行几行的往下读取
用循环语句,一次读几行。用双重循环语句,就可以再几行几行地读。例如:include <stdio.h> include <stdlib.h> FILE *fin;main(){ char s[20][200];int i,j;fin=fopen("abc.txt","r"); \/\/ 打开文件 for (i=0;i<4;i++) fgets(s[i],200,fin); \/\/ 以字符串形式 读4...

C++如何逐行读取txt文件,并将读取出来的数据进行运算导入到另一个文件...
1、首先我们在电脑上新建一个文件夹,名称叫txt2array。然后,打开我们的devc++,新建一个控制台c++项目,名称也叫txt2array。2、将项目文件及源代码文件以及我们演示用的数据文件都存放在txt2array文件夹中。3、向数据文件中写入一些演示用数据。4、读取文件。输入如下代码:运行下,看来我们读取成功了...

怎么用C++在文本中读取一行或多行指定的数据?
1、fgets函数:原型:char * fgets(char * buf, int bufsize, FILE * stream);功能:从文件结构体指针stream中读取数据,每次读取一行;说明:读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋值为\\0)。如果该行不足bufsize个字符,则读完该行就结束,如果该行...

C++读取TXT 怎样每次读一行,循环读下一行
可以用getline函数,举个例子如下(从b.txt中按行循环读取内容):include <iostream>#include <fstream>#include <string>using namespace std;int main(){int cnt=0;string str;ifstream fin("b.txt", ios::in);if(!fin){printf("The file is not exist!");return -1;}while(getline(fin, ...

c++读取.txt文件从最后一行往前读数据
文件操作指针,只能够从前往后。不能够倒着读。可以把文件内容挨着读入到字符数组缓存当中,然后倒着操作即可。1、C语言标准库提供了一系列文件操作函数。文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中。例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数...

请问C++ 如何从txt文件中读取数据,然后保存在类的数组中?
要声明一个信息(学生)类的数组然后再读文件,读文件大概代码如下:ifstream File_read;while(!File_read.eof()){ File_read>>data[i].num>>data[i].name>>data[i].score;i++;} 数组data是的类型是信息类。自己试试。

C++中读取txt文本数据时如何做到遇到空格时换行读取
可以换个思路:遇到空格后继续读取,但全部过滤,只到遇到一个换行符为止

相似回答