gpt4 book ai didi

c - 在c中读取文件指针,如果EOF则返回null

转载 作者:行者123 更新时间:2023-11-30 15:05:02 25 4
gpt4 key购买 nike

我是一名学生,正在制作一个函数,该函数接受文件指针(例如 stdin)并返回一个结构指针。所以我不知道如何开始。当遇到 EOF 时,它应该返回一个 null 指针。

这是我到目前为止所做的:

typedef struct book
{
char *author;
char *title;
char *bookcode;
} Book;

Book *getBook(FILE *pointer)
{
Book *p;
int c;
while ((c = fgetc(pointer)) != EOF)
{
//create book
putchar (c);
}
}
return p;
}

输入文件示例

chris evans
hello there
as2 ss1
ashley lee
big buildings
d2a 4sa

最佳答案

你大概需要这个:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct book
{
char *author;
char *title;
char *bookcode;
} Book;

void freeBook(Book *p)
{
free(p->author);
free(p->title);
free(p->bookcode);
free(p);
}

Book *getBook(FILE *pointer)
{
Book *p = malloc(sizeof(Book));
p->author = NULL;
p->title = NULL;
p->bookcode = NULL;

char line[200];

if (fgets(line, sizeof(line), pointer) != NULL)
p->author = strdup(line);

if (fgets(line, sizeof(line), pointer) != NULL)
p->title = strdup(line);

if (fgets(line, sizeof(line), pointer) != NULL)
p->bookcode = strdup(line);

if (feof(pointer))
{
freeBook(p);
return NULL;
}
else
return p;
}

int main()
{
Book *pBook;

do
{
pBook = getBook(stdin);

// do something with pBook


freeBook(pBook); // free memory of book if you are done with it
// and only if you are done with it.
} while (pBook != NULL);
}

免责声明:

这是基本的非错​​误检查代码,还有很大的改进空间,只是给您一个想法。

关于c - 在c中读取文件指针,如果EOF则返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40040260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com