【问题标题】:Read specific fields from a file in C从 C 中的文件中读取特定字段
【发布时间】:2016-02-24 22:41:37
【问题描述】:

如果我得到以下文件

1 station1 1
2 station2 2
3 station3 3
4 station4 4
5 station5 5
6 station6 6
7 station7 7
8 station8 8
9 station9 9
10 station10 10

我想读取第一行和最后一行的数据。我试过这个:

    for (i=0; i<n; i++) {
    ret = fork();
    if (ret == 0) {
                fscanf(fstation,"%d %s %d",id, station, num);
                printf("Identifier is %d %s %d \n",id,station,num);


                exit(0);


        }else{wait(&st);}



        }

输出是这样的。

Identifier is 0   0
Identifier is 0   0
Identifier is 0   0
Identifier is 0   0
Identifier is 0   0
Identifier is 0   0
Identifier is 0   0
Identifier is 0   0
Identifier is 0   0
Identifier is 0   0

效果不是很好,我做错了什么? 编辑:很抱歉造成误解,我尝试翻译部分代码以使其更易于理解。

【问题讨论】:

  • fscanf 应该被赋予指向 id、station 和 num 的指针(即 &id、&ststion、&num)。顺便说一句,你为什么要分叉?
  • 指针结果相同,我使用 fork 因为我为每一行处理子进程。
  • 你能告诉我们新代码吗?顺便说一句,输出与 printf 不匹配。
  • 请发帖Minimal Complete and Verifiable Example。事实上,您的代码和描述没有正确关联。所以很难说某些事情是你代码中的真正错误还是只是拼写错误。例如,fscanf 暗示 station 存储一个字符串。然而 printf 将其打印为 int。那么哪个是对/错?您甚至没有显示 station 或任何其他变量的定义。

标签: c string file scanf


【解决方案1】:

从 fscanf 扫描的所有内容都需要取消引用。

fscanf(fstation,"%d %s %d",id, station, num);

在这种情况下,您将 fscanf 中的“id”和“num”作为普通变量,它会将存储在变量中的值视为发送新信息的地址。为了将新信息存储在所需的变量中,您需要为 fscanf 提供这些变量的地址。这可以通过 & 符号来完成。

fscanf(fstation,"%d %s %d", &id, station, &num);

然而,字符串不必以这种方式完成,因为它们已经是指向地址(字符数组)的指针。所以在这种情况下,'station' 可以不带 & 号。

【讨论】:

    【解决方案2】:

    stackoverflow 上的其他问题/答案似乎相关。答案表明您需要在 fork() 之后分别为父母和孩子 fopen() 文件

    writing and reading within a fork - C

    【讨论】:

      猜你喜欢
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多