【问题标题】:File pointer reading in c and returning null if EOF在 c 中读取文件指针并在 EOF 时返回 null
【发布时间】:2017-02-23 17:08:54
【问题描述】:

我是一名学生,正在制作一个接受文件指针的函数,比如说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

【问题讨论】:

  • 请详细说明您的问题并告诉我们您实际想要达到的目标。我们需要更全面地了解您的问题。另请阅读thisthis。并学习如何格式化代码。 Book 是什么?你的文件包含什么?
  • 文件的格式是什么??给我们一个包含 2 本书的文件示例。
  • 你熟悉指针和动态内存分配的概念吗?如果不是,请先熟悉它。
  • 使用fgets 读取文本。请记住,每个字符串输入的末尾都会有一个newline,您必须将其删除。

标签: c pointers input output


【解决方案1】:

你大概需要这个:

#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);
}

免责声明:

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

【讨论】:

  • 非常感谢,但是如何在调用函数后跳过第一本书,以便返回第二本书,就像在示例输入文件中一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
相关资源
最近更新 更多