代码之家  ›  专栏  ›  技术社区  ›  NLed

如何在fscanning.txt文件时跳过第一行?

  •  13
  • NLed  · 技术社区  · 14 年前

    我用的是C语言,我的知识很基础。 我想扫描一个文件,只在第一行或第二行之后获取内容…

    我试过:

    fscanf(pointer,"\n",&(*struct).test[i][j]);
    

    但是这个语法只是从第一行开始=\

    这怎么可能?

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  14
  •   Synchro    10 年前

    fgets将得到一行,并从下一行开始设置文件指针。然后,你可以在第一行之后开始读你想读的东西。

    char buffer[100];
    fgets(buffer, 100, pointer);
    

    只要你的第一行少于100个字符,它就可以工作。否则,必须检查并循环。

        2
  •  34
  •   Zac    10 年前

    我可以用scanf跳过以下几行:

    fscanf(config_file, "%*[^\n]\n", NULL);
    

    格式字符串表示包含空格的任何字符的行。格式字符串中的*和空指针意味着我们不想保存行,而只想增加文件位置。

    格式字符串说明:
    % 是每个扫描格式字符串以开头的字符;
    * 指示不将找到的模式放在任何位置(通常将找到的模式保存到格式字符串之后的参数中,在这种情况下,参数为空);
    [^\n] 指除换行符以外的任何字符;
    \n 指新线;

    所以 [^\n]\n 表示以换行符结尾的全文行。

    参考 here

        3
  •  12
  •   Jack    14 年前

    现在还不清楚你想把数据存储在什么地方,所以很难猜出答案,顺便说一下,你可以跳过字节,直到你超过 \n :

    FILE *in = fopen("file.txt","rb");
    

    你可以跳过一整行 fgets 但是它是不安全的(因为你需要预先估计直线的长度),否则使用 fgetc :

    uchar8 c;
    do
      c = fgetc(in);
    while (c != '\n')
    

    最后,您应该在 fscanf 实际分析数据,比如

    fscanf(in, "%f", floatVariable);
    

    你可以参考 here 用于说明符。

        4
  •  3
  •   Casey    14 年前

    fgets 会在这里工作。

    #define MAX_LINE_LENGTH 80
    
    char buf[MAX_LINE_LENGTH];
    
    /* skip the first line (pFile is the pointer to your file handle): */
    fgets(buf, MAX_LINE_LENGTH, pFile);
    
    /* now you can read the rest of your formatted lines */