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++文件读写操作(一)将字母表写入TXT文本文件 


C++文件读写操作(二)逐字符读取文本和逐行读取文本 


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语言逐行读取文件?的主要内容,如果未能解决你的问题,请参考以下文章

Bash怎么逐行读取一个文件

C++中怎么逐行读取数据

C 语言文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )

Python读取文件内容的方法有几种

C语言怎么读取CSV里面的数据?

如何用VBS逐行读取文本文件的内容,并输入变量