c - 如何将文件中的单行保存到两个不同的字符串¸在结构>>行格式(姓名#姓氏年龄)
问题描述
所以我有任务将另一个文件中的某些内容输出到一个文件...假设输入文件的格式为(NAME#SURNAME AGE),有 100 行,我必须以这种格式(NAME AGE)输出 15 岁以上的人姓氏),我在结构中有这样的东西
struct person
{
char name[10];
char surname[10];
int age;
};
我可以吗,如果可以的话,我怎样才能将输入文件读取到该结构(文件是二进制文件)
解决方案
如果您需要有关代码的更多帮助,请创建第一个版本并编辑您的问题,然后添加评论,社区将为您提供帮助。
但是,如果您正在寻找方法,您可以使用类似的方法:
- 以读取模式打开要提取数据的文件(例如
fopen(filename, "r")
) - 检查文件是否正确打开
- 使用一段时间并使用
fgets()
或使用N 个字符getline()
(请注意,getline()
在 ISO/IEC TR 24731-2:2010 扩展中(参见n1248)。)。
有很多关于如何在文件中逐行读取的线程(例如,在 C 中逐行浏览文本文件) - 现在您正在寻找一种用分隔符分割行的方法,您可以使用
strtok()
,strsep()
/strpbrk()
或者您可以自己实现一个简单的字符串分隔符(也许看看这个问题) 接下来是 AGE 部分,您只想复制 AGE 高于 15 的行,因此使用
strtol()
转换您的字符串long int
然后检查该值。
不atoi()
推荐使用此功能)。atoi() 函数已被 strtol() 弃用,不应在新代码中使用。
atoi(3) 的源Mac OS X 手册页
然后您需要创建和/或写入文件。您可以使用
fopen(newFilename, "w")
,检查函数返回给您的文件描述符,如果没问题,您可以添加行fprintf()
(例如fprintf(fd, "%s %s %s\r\n", name, age, surname);
)。
如果这是您在 c 中的第一个项目/练习之一,请花点时间正确理解您使用的函数,并在使用它们之前始终检查返回的值。
推荐阅读
- angular - 创建 FormControl 后更改“UpdateOn”-行为
- c++ - 如何使用while循环c ++在乘法表中添加标题
- revit-api - Revit API 重新打开表单并保留数据
- c# - c# dotnet项目运行失败:找不到程序集文件
- r - 在函数内构建模型返回“可变长度不同(为 'var' 找到)”
- linux - 在 Linux 中从 MS AD 转换时间戳
- ibm-watson - IBM Watson 不训练聊天机器人
- azure - 拉取请求完成时 AzureDev Ops YAML 管道触发
- firebase - 获取文档数据颤动的错误映射
- javascript - 使用 Vue 3 填充 HTML 表格