c - 使用 fscanf 从文件中读取格式化字符串

标签 c file scanf

我有一个内容如下所示的文件。

[John][Antony][Mathew] Australia

我需要使用fscanf从文件中读取内容。

输出应该是:

firstName = John
middleName = Antony
lastName = Mathew
Country = Australia

fscanf 中使用什么格式来获取单独字符串中的名字、中间名、姓氏和国家/地区?

目前fscanf(fp, "[%[^]]",firstName) 正确给出了firstName。

最佳答案

类似于@BLUEPIXY评论“[%[^]]][%[^]]][%[^]]]%[^\n]%*c”

由于数据肯定是每行的,所以先读取一行,然后解析它。

所需的格式为 "[%99[^]]]",表示 1) 扫描 '[' 2) 扫描最多 99 个非 ] 字符并形成字符串 3) 扫描']'

#define N 100
#define FMT "[%99[^]]]" 
#define FMTCTY " %99[^\n]" 
char firstName[N], middleName[N], lastName[N], Country[N];

char buf[4*N + 10];
while (fgets(buf, sizeof buf, fp) != NULL) {
  if (4 != sscanf(buf, FMT FMT FMT FMTCTY, firstName, middleName, lastName, Country)) {
    break;
  }
  foo(firstName, middleName, lastName, Country);
}

自信的OP可以形成需要的输出格式字符串。

关于c - 使用 fscanf 从文件中读取格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31806132/

相关文章:

android - 如何在 android libgdx 上保存和读取整数?

c - fscanf 读取输入文件的问题

c++ - std::apply-ing sscanf 到元组中,元组未完全更新

c - 我的程序不接受 scanf 命令的输入

c++ - Linux 管道、fork 和 execlp : how to get the value written into stream 1

c - 包含一个 Makefile,就好像我在另一个目录中一样?

c - 使用 libpcap 同时监听两个设备

file - 将 *multipart.FileHeader 的内容读入 []byte

c# - 安装后cygwin gdb仍然无法工作

c# - 我可以判断另一个进程是否正在创建文件吗?