关于C语言中文本文件的逐行读取的实现

现有helloworld.txt文本文件。voidmain(){while(1){ReadData();someprocess();}}本程序的主要目的是,ReadDat... 现有helloworld.txt文本文件。
void main()
{
while (1)
{
ReadData();
someprocess();
}
}
本程序的主要目的是,ReadData()函数每次从helloworld.txt中读取下一行内容,然后由someprocess()函数对读到的内容进行处理。
请大家不吝赐教!
这个ReadData()函数的实现难点是:
如果第i次调用ReadData()时读取的是第i行,那么第i+1次调用时读取的就是第i+1行。
第i次调用ReadData()时读取第i行后,ReadData()即执行结束。希望当第i+1次调用ReadData()函数时,它能读第i+1行。
展开
 我来答
小夏聊生活
高能答主

2019-12-06 · 专注于分享生活知识,热爱生活
小夏聊生活
采纳数:447 获赞数:114611

向TA提问 私信TA
展开全部

若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。

C语言中文本文件的逐行读取的实现的代码如下:

#include<stdio.h>

main()

{

FILE * fp;

fp=fopen(“noexist”,”a+”);

if(fp= =NULL) return;

fclose(fp);

}

扩展资料

1、如果输入文本每行中没有空格,则line在输入文本中按换行符分隔符循环取值。

2、如果输入文本中包括空格或制表符,则不是换行读取,line在输入文本中按空格分隔符或制表符或换行符特环取值。

3、可以通过把IFS设置为换行符来达到逐行读取的功能。

吉祥二进制
高粉答主

推荐于2017-10-05 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84578

向TA提问 私信TA
展开全部
  #include <stdio.h>
  #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);//这里的操作你自己定义
  }
  int 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);
  }
  return 0;
  }

程序执行效果与1.txt的内容显示完全一致。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小星星教育知识分享
高粉答主

2020-05-23 · 用教师的智慧点燃学生的智慧火花
小星星教育知识分享
采纳数:202 获赞数:67136

向TA提问 私信TA
展开全部

char *fgets(char *buf, int bufsize, FILE *stream);

成功,则返回第一个参数buf;否则返回NULL

例子:

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

#include<malloc.h>

#define FILE_PATH "/home/tmp/test/test.txt"

#define BUFF_LEN 256

int main()

{

FILE *fp = NULL;

char *file = FILE_PATH;

char *line = (char *)malloc(BUFF_LEN * sizeof(char));//和C++不同的是,事先要申请空间,否则报段错误

if( (0 != access(file,R_OK|F_OK)) || (NULL==(fp=fopen(file,"r"))) )

{

printf("open %s failed\n",file);

return -1;

}

while( fgets(line, BUFF_LEN, fp) != NULL )//逐行读取数据

{

printf("the content of each line is:\n%s",line);

}

if(fp!=NULL)

{

fclose(fp);

}

return 0;

}

扩展资料

C++逐行读取txt文件中的字符串

#include<stdio.h>

#include<string.h>

intmain()

{

charszTest[1000]={0};

intlen=0;

FILE*fp=fopen("1.txt","r");

if(NULL==fp)

{

printf("failedtoopendos.txt\n");

return1;

}

while(!feof(fp))

{

memset(szTest,0,sizeof(szTest));

fgets(szTest,sizeof(szTest)-1,fp);//包含了换行符

printf("%s",szTest);

}

fclose(fp);

printf("\n");

return0;

}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tg_scorpio
推荐于2017-10-01 · TA获得超过414个赞
知道小有建树答主
回答量:195
采纳率:100%
帮助的人:0
展开全部
#include <stdio.h>
#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);
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
苌宾I8
2007-07-26 · TA获得超过178个赞
知道答主
回答量:182
采纳率:0%
帮助的人:194万
展开全部
#include <stdio.h>

int ReadData(void)
{
unsigned int rc, i, get; /*get为读取一个字节*/
FILE *fp;
fp = fopen("helloworld.txt", "r+");
if (fp == NULL)
{
return -1; /*打开文件失败返回-1*/
}
rc=0;
i=0;
while ((get = fgetc(fp)) != EOF)
{
if((char)get == '\n') /*记录换行符*/
{
rc = ftell(fp);
i++;
}
rc++;
}
return i;
}
int main()
{
int row;
row = ReadData();
printf("Row = %d\n", row); /*打印文件行数*/
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式