使用文件操作函数fscanf即可提取文本当中特定的信息.例如要提取一个整数,可以用fscanf(fp,"%d",n);要提取一个字符串可以用fscanf(fp,"%s",s),其中fp为文件指针.
①.、C语言标准库提供了一系列文件操作函数.文件操作函数一般以f+单词的形式来命名(f是file的简写),其声明位于stdio.h头文件当中.例如:fopen、fclose函数用于文件打开与关闭;fscanf、fgets函数用于文件读取;fprintf、fputs函数用于文件写入;ftell、fseek函数用于文件操作位置的获取与设置.
#includestdio.h
int?a;
char?b,c[100];
int?main(){
FILE?*?fp1?=?fopen("input.txt",?"r");//打开输入文件
puts("不能打开文件!");
return?0;
}
fscanf(fp1,"%d",a);//从输入文件读取一个整数
b=fgetc(fp1);//从输入文件读取一个字符
fgets(c,100,fp1);//从输入文件读取一行字符串
printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数
fclose(fp1);//关闭输入文件
C语言可以使用fopen()函数读取txt文本里.
示例:
#include stdio.h
void main( void )
{
int numclosed;
/* Open for read (will fail if file "data" does not exist) */
if( (stream? = fopen( "data", "r" )) == NULL )
printf( "The file 'data' was not opened\n" );
else
printf( "The file 'data' was opened\n" );
/* Open for write */
/* Close stream */
/* All other files are closed: */
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
扩展资料
使用fgetc函数
#include stdlib.h
FILE *stream;
int? i, ch;
/* Open file to read line from: */
if( (stream = fopen( "fgetc.c", "r" )) == NULL )
exit( 0 );
ch = fgetc( stream );
buffer[i] = (char)ch;
/* Add null to end string */
buffer[i] = '\0';
printf( "%s\n", buffer );
fclose( stream );
先用getline或fgets读取数据到一个字符串中,这个串定义的长一点,保证够用就行.
举例:
fgets( str , sizeof(str), fp ),//fp打开的文件指针.
然后调用for循环去读取串的的数据,假设你的分隔符是空格,遍历str,遇到空格就得到一个数据,然后继续遍历,直到str尾.
再去fgets数据,再遍历,即可得到所有的数据.
拓展资料:
C语言是一门通用计算机编程语言,广泛应用于底层开发.
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.
相关函数 fopen,fclose
表头文件 #includestdio.h
定义函数 FILE * freopen(const char * path,const char * mode,FILE * stream);
函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode请参考fopen()说明.参数stream为已打开的文件指针.Freopen()会将原stream所打开的文件流关闭,然后打开参数path的文件.
返回值 文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败则返回NULL,并把错误代码存在errno 中.
范例
复制代码代码如下:
main()
FILE * fp;
fp=fopen("/etc/passwd","r");
fp=freopen("/etc/group","r",fp);
fclose(fp);
相关函数 rewind,ftell,fgetpos,fsetpos,lseek
定义函数 int fseek(FILE * stream,long offset,int whence);
函数说明 fseek()用来移动文件流的读写位置.参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数.
参数 whence为下列其中一种:
SEEK_SET从距文件开头offset位移量为新的读写位置.SEEK_CUR 以目前的读写位置往后增加offset个位移量.
SEEK_END将读写位置指向文件尾后再增加offset个位移量.
当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现.
下列是较特别的使用方式:
①.) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);
返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码.
附加说明 fseek()不像lseek()会返回读写位置,所以呢必须使用ftell()来取得目前读写的位置.
FILE * stream;
long offset;
fpos_t pos;
stream=fopen("/etc/passwd","r");
printf("offset=%d/n",ftell(stream));
rewind(stream);
fgetpos(stream,pos);
printf("offset=%d/n",pos);
pos=10;
fsetpos(stream,pos);
printf("offset = %d/n",ftell(stream));
fclose(stream);
offset =0
offset=10
相关函数 fseek,rewind,fgetpos,fsetpos
定义函数 long ftell(FILE * stream);
函数说明 ftell()用来取得文件流目前的读写位置.参数stream为已打开的文件指针.
返回值 当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码.
错误代码 EBADF 参数stream无效或可移动读写位置的文件流.
范例 参考fseek().
相关函数 fopen,fread,fseek,fscanf
定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);
函数说明 fwrite()用来将数据写入文件流中.参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定.Fwrite()会返回实际写入的nmemb数目.
返回值 返回实际写入的nmemb数目.
#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}
struct test
int size;
}s[nmemb];
set_s(0,"Linux!");
set_s(1,"FreeBSD!");
stream=fopen("/tmp/fwrite","w");
fwrite(s,sizeof(struct test),nmemb,stream);
执行 参考fread().
相关函数 read,fopen,fread,fgetc
定义函数 int getc(FILE * stream);
函数说明 getc()用来从参数stream所指的文件中读取一个字符.若读到文件尾而无数据时便返回EOF.虽然getc()与fgetc()作用相同,但getc()为宏定义,非真正的函数调用.
返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾.
范例 参考fgetc().
相关函数 fopen,fread,fscanf,getc
定义函数 int getchar(void);
函数说明 getchar()用来从标准输入设备中读取一个字符.然后将该字符从unsigned char转换成int后返回.
返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生.
附加说明 getchar()非真正函数,而是getc(stdin)宏定义.
int c,i;
c=getchar();
putchar(c);
相关函数 fopen,fread,fscanf,fgets
定义函数 char * gets(char *s);
函数说明 gets()用来从标准设备读入字符并存到参数s所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上NULL作为字符串结束.
返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生.
附加说明 由于gets()无法知道字符串s的大小,必须遇到换行字符或文件尾才会结束输入,所以呢容易造成缓冲溢出的安全性问题.建议使用fgets()取代.
范例 参考fgets()
相关函数 tmpfile
表头文件 #includestdlib.h
定义函数 char * mktemp(char * template);
函数说明 mktemp()用来产生唯一的临时文件名.参数template所指的文件名称字符串中最后六个字符必须是XXXXXX.产生后的文件名会借字符串指针返回.
返回值 文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败则返回NULL,并把错误代码存在errno中.
附加说明 参数template所指的文件名称字符串必须声明为数组,如:
char template[ ]="template-XXXXXX";
不可用char * template="template-XXXXXX";
#includestdlib.h
char template[ ]="template-XXXXXX";
mktemp(template);
printf("template=%s/n",template);
相关函数 fopen,fwrite,fscanf,fputc
定义函数 int putc(int c,FILE * stream);
函数说明 putc()会将参数c转为unsigned char后写入参数stream指定的文件中.虽然putc()与fputc()作用相同,但putc()为宏定义,非真正的函数调用.
返回值 putc()会返回写入成功的字符,即参数c.若返回EOF则代表写入失败.
范例 参考fputc().
定义函数 int putchar (int c);
函数说明 putchar()用来将参数c字符写到标准输出设备.
返回值 putchar()会返回输出成功的字符,即参数c.若返回EOF则代表输出失败.
附加说明 putchar()非真正函数,而是putc(c,stdout)宏定义.
范例 参考getchar().
相关函数 fseek,ftell,fgetpos,fsetpos
定义函数 void rewind(FILE * stream);
函数说明 rewind()用来把文件流的读写位置移至文件开头.参数stream为已打开的文件指针.此函数相当于调用fseek(stream,0,SEEK_SET).
返回值
范例 参考fseek()
相关函数 setbuffer,setlinebuf,setvbuf
定义函数 void setbuf(FILE * stream,char * buf);
函数说明 在打开文件流后,读取内容之前,调用setbuf()可以用来设置文件流的缓冲区.参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址.如果参数buf为NULL指针,则为无缓冲IO.Setbuf()相当于调用:setvbuf(stream,buf,buf?_IOFBF:_IONBF,BUFSIZ)
相关函数 setlinebuf,setbuf,setvbuf
定义函数 void setbuffer(FILE * stream,char * buf,size_t size);
函数说明 在打开文件流后,读取内容之前,调用setbuffer()可用来设置文件流的缓冲区.参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小.
相关函数 setbuffer,setbuf,setvbuf
定义函数 void setlinebuf(FILE * stream);
函数说明 setlinebuf()用来设置文件流以换行为依据的无缓冲IO.相当于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);请参考setvbuf().
相关函数 setbuffer,setlinebuf,setbuf
定义函数 int setvbuf(FILE * stream,char * buf,int mode,size_t size);
函数说明 在打开文件流后,读取内容之前,调用setvbuf()可以用来设置文件流的缓冲区.参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小,参数mode有下列几种
_IONBF 无缓冲IO
_IOLBF 以换行为依据的无缓冲IO
_IOFBF 完全无缓冲IO.如果参数buf为NULL指针,则为无缓冲IO.
相关函数 fputc,getchar,getc
定义函数 int ungetc(int c,FILE * stream);
函数说明 ungetc()将参数c字符写回参数stream所指定的文件流.这个写回的字符会由下一个读取文件流的函数取得.
返回值 成功则返回c 字符,若有错误则返回EOF.
int main()
FILE *fp = NULL;
char* str;
char re;
int num = 10;
str = (char*)malloc(100);
// printf("str=%s\n", str);
fp = fopen("/local/test.c","a+");
if (fp==NULL){
printf("Fail to open file\n");
// ? ? fseek(fp,-1,SEEK_END);
num = ftell(fp);
printf("test file long:%d\n",num);
fscanf(fp,"%s",str);
printf("str = %s\n",str);
printf("test a: %s\n",str);
while ((re=getc(fp))!=EOF){//getc可以用作fgetc用
printf("%c",re);
//fread(str,10,10,fp);
fgets(str,100,fp);
sprintf(str,"xiewei test is:%s", "ABCDEFGHIGKMNI");
// ?fprintf(fp,"%s\n",str);
if(str!=NULL){
free(str);
return 0;
C语言文件操作函数
①.,两种文件存取方式(输入,输出方式)
顺序存取
直接存取
文本文件
二进制文件
定义文件类型指针变量的一般形式:
FILE *指针变量名;
例如:
在使用文件之前,需打开文件.在C里使用fopen函数打开文件.格式为:
fopen(文件名,文件使用方式);
此函数返回一个指向FILE类型的指针.如:
FILE *fp;
fp=fopen("file_1","r");
如果调用成功,fp就指向file_1,否则返回为NULL,所以为了保证文件的正确使用,要进行测试.采用如下语句:
If((fp=fopen("file_1","r"))==NULL)
printf("Cannot open this file\n");
exit(0);
最常用的文件使用方式及其含义如下:
①.,"r".为读而打开文本文件.(不存在则出错)
①.0,"wb+".功能与"w+"同.只是在随后的读写时,可以由位置函数设置读和写的起始位置.
①.1,"a+".功能与"a"相同;只是在文件尾部添加新的数据后,可以从头开始读.
当文件的读写操作完成之后,使用fclose函数关闭文件.格式如下:
fclose(文件指针)
如:fclose(fp);
①.,调用putc(或fputc)函数输出一个字符
调用形式为:
putc(ch,fp);
功能是:将字符ch写到文件指针fp所指的文件中去.当输出成功,putc函数返回所输出的字符;否则,返回一个EOF值.EOF是在stdio.h库函数文件中定义的符号常量,其值等于-1.
#include
Void main()
FILE *fpout;
char ch;
if(fpout=fpopen("file_1","w")==NULL)
printf("Cannot open this file!\n");
ch=getchar();
while(ch!='@')
{ fputc(ch,fpout); ch=getchar(); }
fclose(fpout);
ch=getc(pf);
功能是:从pf指定的文件中读如一个字符,并把它作为函数值返回.
例如:把一个已存在磁盘上的file_1.dat文本文件中的内容,原样输出到终端屏幕上.
void main(){
FILE *fpin;
if((fpin=fopen("file_1.dat","r"))==NULL)
{ printf("Cann't open this file!\n");exit(0);}
ch=fgetc(fpin);
while (ch!=EOF)
{ putchar(ch); ch=fgetc(fpin);}
fclose(fpin);
EOF可以作为文本文件的结束 标志,但不能作为二进制文件的结束符.feof函数既可以判断二进制文件,又可以判断文本文件.
例:编写程序,用于把一个文本文件(源)复制到另一个文件(目的)中,源文件名和目的文件名由命令行输入.命令形式如下:
可执行程序名 源文件名 目的文件名
void filecopy(FILE* ,FILE *);
void main(int argc,char *argv[]){
FILE *fpin,*fpout;
{ fpin=fopen(argv[1],"r");
filecopy(fpin,fpout);
fclose(fpin);fclose(fpout);
printf("The file names too many!!\n";
printf("There are no file names for input or output!!\n );
void filecopy(FILE *fpin,FILE *fpout)
ch=getc(fpin);
while(!feof(fpin))
{putc(ch,fpout); ch=getc(fpin);}
①.,fscanf函数
fscanf只能从文本文件中按格式输入,和scanf函数相似,只不过输入的对象是磁盘上文本文件中的数据.调用形式为:
fscanf(文件指针,格式控制字符串,输入项表)
例如:fscanf(fp,"%d%d",a,b);
fscanf(stdin,"%d%d",a,b);
等价于scanf("%d%d",a,b);
fprintf函数按格式将内存中的数据转换成对应的字符,并以ASCII代码形式输出到文本文件中.Fprintf函数和printf函数相似,只是将输出的内容按格式存放到磁盘的文本文件中.调用形式如下:
fprintf(文件指针,格式控制字符串,输出项表)
如:fprintf(fp,"%d %d",x,y);
以下语句 fprintf(stdout,"%d %d",x,y)
①.,fgets函数
fgets函数用来从文件中读入字符串.调用形式如下:
fgets(str,n,fp);
函数功能是:从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符时,则遇到换行符或一个EOF结束本次读操作,并已str作为函数值返回.
fput函数把字符串输出到文件中.函数调用形式如下:
fputs(str,fp);
注意:为了便于读入,在输出字符串时,应当人为的加诸如"\n"这样的字符串.
#include iostream
int main(int argc, char *argv[])
char arr[10] ;
char *ap = "hello!" ;
FILE *fp ;
if ((fp = fopen("hello.txt", "wt+")) == NULL)
printf("error!") ;
exit(1) ;
fputs(ap, fp) ;
rewind(fp) ; //
fgets(arr, 10, fp) ;
printf("%s\n", arr) ;
fclose(fp) ;
return 0 ;
例如有如下结构体:
struct st{
fwrite(pers[i],sizeof(struct st),1,fp);
以下语句从fp所指的文件中再次将每个学生数据逐个读入到pers数组中.
i=0;
fread(pers[i],sizeof(struct st),1,fp);
while(!feof(fp))
{ i++;
①.,fseek函数
fseek函数用来移动文件位置指针到指定的位置上,接着的读或写操作将从此位置开始.函数的调用形式如下:
fseek(pf,offset,origin)
pf:文件指针
offset:以字节为单位的位移量,为长整形.
origin:是起始点,用来指定位移量是以哪个位置为基准的.
位移量的表示方法
标识符 数字 代表的起始点
SEEK_SET 0 文件开始
SEEK_CUR 1 文件当前位置
假设pf已指向一个二进制文件,则;
fseek(pf,-10L*sizeof(int),SEEK_END)
对于文本文件,位移量必须是0;如:
fseek(pf,0L,SEEK_SET)
fseek(pf,0L,SEEK_END)
ftell函数用以获得文件当前位置指针的位置,函数给出当前位置指针相对于文件开头的字节数.如;
long t;
t=ftell(pf);
当函数调用出错时,函数返回-1L.
我们可以通过以下方式来测试一个文件的长度:
fseek(fp,0L,SEEK_END);
t=ftell(fp);
rewind(pf);
函数没有返回值.函数的功能是使文件的位置指针回到文件的开头.
①.,在被调函数prime中,判断和统计10个整数中的素数以及个数.
Int prime(int a[],int n)
int I,j,k=0,flag=0;
{ flag=0; break;}
else flag=1;
if(flag)
{a[k]=a[i];k++;}
return k;
int n,I,a[10];
for(n=0;n10;n++)
fscanf(fp,"%d",a[n]);
n=prime(a,n);
文件流指针应打文件,要同操作两文件,所要用两文件流指针
,像要同操作两箱.
程序理解:
例都差,看看stdlibf函数,C文件操作:
FILL
*pf;
//声明指针,指针数组
FILE
或
**pf;
pf
=fopen();
fread()
or
fwrite()
...
//操作文件
fclose(pf)
//关闭文件
以上就是土嘎嘎小编为大家整理的c语言读取文件内容函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!