首页 > 解决方案 > 如何将文件中的单行保存到两个不同的字符串¸在结构>>行格式(姓名#姓氏年龄)

问题描述

所以我有任务将另一个文件中的某些内容输出到一个文件...假设输入文件的格式为(NAME#SURNAME AGE),有 100 行,我必须以这种格式(NAME AGE)输出 15 岁以上的人姓氏)​​,我在结构中有这样的东西

struct person
{
    char name[10];
    char surname[10];
    int age;
};

我可以吗,如果可以的话,我怎样才能将输入文件读取到该结构(文件是二进制文件)

标签: cfile

解决方案


如果您需要有关代码的更多帮助,请创建第一个版本并编辑您的问题,然后添加评论,社区将为您提供帮助。

但是,如果您正在寻找方法,您可以使用类似的方法:

  1. 以读取模式打开要提取数据的文件(例如fopen(filename, "r")
  2. 检查文件是否正确打开
  3. 使用一段时间并使用fgets()或使用N 个字符getline()(请注意,getline()在 ISO/IEC TR 24731-2:2010 扩展中(参见n1248)。)。
    有很多关于如何在文件中逐行读取的线程(例如,在 C 中逐行浏览文本文件
  4. 现在您正在寻找一种用分隔符分割行的方法,您可以使用strtok()strsep()/strpbrk()或者您可以自己实现一个简单的字符串分隔符也许看看这个问题
  5. 接下来是 AGE 部分,您只想复制 AGE 高于 15 的行,因此使用strtol()转换您的字符串long int然后检查该值。
    atoi()推荐使用此功能)。

    atoi() 函数已被 strtol() 弃用,不应在新代码中使用。

    atoi(3) 的源Mac OS X 手册页

  6. 然后您需要创建和/或写入文件。您可以使用fopen(newFilename, "w"),检查函数返回给您的文件描述符,如果没问题,您可以添加行fprintf()(例如fprintf(fd, "%s %s %s\r\n", name, age, surname);)。

如果这是您在 c 中的第一个项目/练习之一,请花点时间正确理解您使用的函数,并在使用它们之前始终检查返回的值


推荐阅读