【问题标题】:How to read files with strings and integers using fgets如何使用 fgets 读取带有字符串和整数的文件
【发布时间】:2017-02-09 21:46:35
【问题描述】:

我注意到fscanf 不适用于确定的 C 编译器(Intel、Cray),所以我想使用fgets 来读取包含字符串和整数的简单输入文件

$cat input.txt
st 10 167 POP 456 244 NONE ENERGY

我可以做这样的事情

int main()
{
    FILE *ptr_file;
    char buf[1000];

    ptr_file = fopen("input.txt", "r");
    if (!ptr_file)
        return 1;

    for (int i = 0; i < 8; i++) {
        fgets(buf, 1000, ptr_file);
        printf("%s", buf);
    }

    fclose(ptr_file);
    return 0;
}

读取文件,然后创建switch case 以将buf 的值存储在integerstring 中。这显然不是很有效,我想知道是否有人有更好的主意。

【问题讨论】:

  • fgets 会将您的输入转换为字符数组。您仍然需要从字符数组中提取数据。在 C 中,您可以在 fgets 之后使用 sscanf
  • 你有一个结构struct 来保存相关值吗?还是您使用一组并行数组?您需要知道将要替换 printf() 的内容 — 您将如何解释和存储输入中的 8 个字段以供进一步处理。
  • @ThomasMatthews sscanf 似乎工作正常,但 fscanf 失败...
  • “注意到 fscanf 不工作”缺少描述。失败的证据是什么?预期什么?
  • 我的问题是,计划将所有这些信息存储在哪里?

标签: c fgets


【解决方案1】:

考虑使用 sscanf,基本上是这样的

     // st 10 167 POP 456 244 NONE ENERGY
     sscanf(buf, "%s %d %d %s %d %d %s %s", var1, &var2....);

【讨论】:

  • @_Aniruddh Dikhit 你知道为什么sscanf 有效而fscanf 无效吗?
  • 检查sscanf() 的返回值并使用"%s" 的宽度更好,如"%9s"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 2018-07-24
相关资源
最近更新 更多