【问题标题】:How to skip first line of input file in C? [duplicate]如何在C中跳过输入文件的第一行? [复制]
【发布时间】:2016-07-17 17:31:25
【问题描述】:

我是 C 编程的新手。我有一个输入文件,我想跳过输入文件的第一行并尝试编写输出文件。我的文件包含一些图形信息。我想从输入文件而不是用户输入中获取 u,v,w 值。但是我没有得到 u,v,w 的值。

printf("Enter (u v w):\n");
    for(i = 0; i < edges; ++i){
        scanf("%d%d%d", &u, &v, &w);
     }

我试过这样:

fgets(buffer, 1024, inputFile);       
        while( ( ch = fgetc(inputFile) ) != EOF )   
        {
         sscanf(buffer, "%d%d%d", &u, &v, &w);
          }

【问题讨论】:

  • 数据是什么样的?
  • 它只包含如下数字:1 2 3
  • 你的算法说:读一行。然后,在一次从文件中丢弃一个字符的同时,重复扫描第一行(也是唯一的)读取的三个 int 值?不确定这是你的意图,但我猜不是。
  • 不,只跳过第一行对我来说就足够了。其他行包含图形信息。
  • 某事告诉我while( ( ch = fgetc(inputFile) ) != EOF ) 应该是:while( fgets(buffer, 1024, inputFile) ),或类似的东西。假设您打算重复扫描 buffer 以获取 3 个 int 值是执行每行处理并读取前三个(并且仅前三个)int 值,忽略每行的其余任何无关内容。

标签: c file input file-io output


【解决方案1】:

可能是这样的:

fscanf(inputFile, "%*[^\n]"); // Read and discard a line
while(fscanf(inputFile, "%d%d%d", &u, &v, &w) == 3 )   
{
    ...
}

示例代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int u, v, w;
    FILE *fp;
    fp = fopen("data.txt", "r");
    if (!fp)
    {
        perror("fopen()");
        exit(EXIT_FAILURE);
    }
    fscanf(fp, "%*[^\n]");  // Read and discard a line
    while (fscanf(fp, "%d%d%d", &u, &v, &w) == 3)
    {
        printf("%d %d %d\n", u, v, w);
    }
    fclose(fp);
}

数据.txt

1 2 3
4 5 6
7 8 9

输出:

4 5 6
7 8 9

【讨论】:

  • 我试过了,但没有任何改变。
  • @zeynep 你所说的“有所作为”是什么意思?失败了?
  • 没有任何改变。我得到相同的结果。
  • @zeynep 我要去检查我的代码
  • @zeynep 它似乎运作良好。你能运行我的示例代码吗?
猜你喜欢
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2017-10-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2015-09-18
相关资源
最近更新 更多