C语言 怎么用fgets()读取一个txt文件中的任意行的信息

C语言怎么用fgets()读取一个txt文件中的任意行的信息比如szhfiassdfhiasfsdfw?sdfhosdfsdfowsdwsfweffgets()遇到换行符... C语言 怎么用fgets()读取一个txt文件中的任意行的信息

比如
szhfias sdfhiasf sdfw?
sdfhosdf sdfows dw
sfwef

fgets()遇到换行符后就不会继续读取了,怎么读取第二行的,或者是第三行的信息
展开
 我来答
tattackor
推荐于2016-01-16 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:891万
展开全部
  1. 首先定义文件指针 fp=fopen("文件名称","r");
    然后用fseek()设置文件指针的位置;
    最后用fgets()得到行信息;

  2. int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。

  3. fgets()函数原型
    char *fgets(char *buf, int bufsize, FILE *stream);
    参数
    *buf: 字符型指针,指向用来存储所得数据的地址。
    bufsize: 整型数据,指明存储数据的大小。
    *stream: 文件结构体指针,将要读取的文件流。

暖阳和风2009
推荐于2017-12-16 · TA获得超过249个赞
知道小有建树答主
回答量:155
采纳率:28%
帮助的人:81.2万
展开全部
#include "stdio.h"
#include "string.h"
void main()
{
int n;
FILE *fin;
char s[25];
fin=fopen("c:\\a.txt","r");
fgets(s,25,fin);/*用fgets读第一行到数组s中*/
n=strlen(s);
fseek(fin,n+1,SEEK_SET);/*将文件指针移到下一行*/
fgets(s,25,fin);/*读取第二行的字符串*/
printf("%s",s);
}
这个是我写的一个,如果你想读到第n行的话,用一个for循环控制使文件指针移到第n行就行了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
老叶的课代表
2020-04-08
知道答主
回答量:5
采纳率:0%
帮助的人:3250
展开全部
如果使用fgets()读取某个文件,第一次读取的bufsize为5,而文件的第一行有10个字符(算上’\n’),那么读取文件的指针会偏移至当前读取完的这个字符之后的位置。也就是第二次再用fgets()读取文件的时候,则会继续读取其后的字符。
如果使用fgets() 读取文件的时候bufsize大于该行的字符总数加2(多出来的两个,一个保存文件本身的’\n’换行,一个保存字符串本身的结束标识’\0’),文件并不会继续读下去,仅仅只是这一行读取完,随后指向文件的指针会自动偏移至下一行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
raef_beyond
2010-06-27 · TA获得超过1651个赞
知道小有建树答主
回答量:382
采纳率:50%
帮助的人:235万
展开全部
哥哥帮你写一个给你参考!
键盘输入一个数字代表你要读的行,你爱读哪行就哪行!

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main(void)
{
FILE *fp = NULL;
char buf[1024] = {0};
int count = 0;
int row = 0;
int ch = 0;

fp = fopen("test.txt", "r");
if (fp == NULL)
{
printf("Cann't open the file!\n");
exit(1);
}
else
{
while (1)
{
printf("Input a row you want to read: \n");
scanf("%d", &row);
fflush(stdin);
while (!feof(fp))
{
fgets(buf, 1024, fp);
count++;
if (row == count)
{
printf("%s", buf);
}
memset(buf, 0, sizeof(buf));
}
count = 0;
rewind(fp);
printf("go on? [y/n]: ");
scanf("%c", &ch);
fflush(stdin);
if (ch == 'y' || ch == 'Y')
{
continue;
}
else
{
break;
}
}
fclose(fp);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式