c语言逐行读取文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言逐行读取文件?相关的知识,希望对你有一定的参考价值。
我写的是linux下的程序,一个文件叫MYFILE里面是一行一行的写内容的,我现在想一行一行的读取出来,请问怎么写?
可以使用fgets函数。
1 函数名:
fgets
2 声明:
char *fgets(char *buf, int bufsize, FILE *stream);
3 头文件:
stdio.h
4 功能:
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋\'\\0\'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
5 参数:
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。
6 返回值:
成功,则返回第一个参数buf;
在读字符时遇到end-of-file(文件结尾),则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;
如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
7 示例代码:
逐行读取in.txt中的数据,并打印。每行不超过100个字符。
int main()FILE *fp;
char buf[101];
fp = fopen("in.txt", "r");//打开文件
while(fgets(buf, sizeof(buf), fp))//每次读取一行数据,直到读取失败。
printf("%s\\n", buf); //打印该行。
fclose(fp);//关闭文件。
return 0;
参考技术A #include <stdlib.h>
#define LINE 1024
char *ReadData(FILE *fp, char *buf)
return fgets(buf, LINE, fp);//读取一行到buf
void someprocess(char *buf)
printf("%s", buf);//这里的操作你自己定义
void main()
FILE *fp;
char *buf, filename[20], *p;
printf("input file name:");
gets(filename);
if ((fp=fopen(filename, "r"))==NULL)
printf("open file error!!\n");
return;
buf=(char*)malloc(LINE*sizeof(char));
while(1)
p=ReadData(fp, buf);//每次调用文件指针fp会自动后移一行
if(!p)//文件读取结束则跳出循环
break;
someprocess(buf);
另外,虚机团上产品团购,超级便宜 参考技术B #include <stdlib.h>
#define LINE 1024
char *ReadData(FILE *fp, char *buf)
return fgets(buf, LINE, fp);//读取一行到buf
void someprocess(char *buf)
printf("%s", buf);//这里的操作你自己定义
void main()
FILE *fp;
char *buf, filename[20], *p;
printf("input file name:");
gets(filename);
if ((fp=fopen(filename, "r"))==NULL)
printf("open file error!!\n");
return;
buf=(char*)malloc(LINE*sizeof(char));
while(1)
p=ReadData(fp, buf);//每次调用文件指针fp会自动后移一行
if(!p)//文件读取结束则跳出循环
break;
someprocess(buf);
参考技术C #include <stdio.h>
#include <stdlib.h>
#define MAXLINE 100
int main()
FILE *fp;
char arr[MAXLINE+1];
if ((fp = fopen ("MYFILE", "r")) == NULL)
perror ("File open error!\n");
exit (1);
while ((fgets (arr, MAXLINE, fp)) != NULL)
fputs (arr, stdout);
return 0;
C++文件读写操作逐字符读取文本和逐行读取文本
相关文章
C++文件读写操作(三)如何统计文本的行数及如何读取文件某一行内容
#include <iostream>
#include <fstream>
using namespace std;
void testByChar()
fstream testByCharFile;
char c;
testByCharFile.open("inFile.txt",ios::in);
while(!testByCharFile.eof())
testByCharFile>>c;
cout<<c;
testByCharFile.close();
void testByLine()
char buffer[256];
fstream outFile;
outFile.open("inFile.txt",ios::in);
cout<<"inFile.txt"<<"--- all file is as follows:---"<<endl;
while(!outFile.eof())
outFile.getline(buffer,256,'\\n');//getline(char *,int,char) 表示该行字符达到256个或遇到换行就结束
cout<<buffer<<endl;
outFile.close();
int main()
cout<<endl<<"逐个字符的读取文件:testByChar() "<<endl<<endl;
testByChar();
cout<<endl<<"将文件每行内容存储到字符串中,再输出字符串 :testByLine()"<<endl<<endl;
testByLine();
/**********************
运行结果
逐个字符的读取文件:testByChar()
1a2b3c4d5e6f7g8h9i10j11k12l13m14n15o16p17q18r19s20t21u22v23w24x25y26zz
将文件每行内容存储到字符串中,再输出字符串 :testByLine()
inFile.txt--- all file is as follows:---
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
10 j
11 k
12 l
13 m
14 n
15 o
16 p
17 q
18 r
19 s
20 t
21 u
22 v
23 w
24 x
25 y
26 z
Process returned 0 (0x0) execution time : 0.484 s
Press any key to continue.
*************************************************/
以上是关于c语言逐行读取文件?的主要内容,如果未能解决你的问题,请参考以下文章
C 语言文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )