c/c++语言开发共享在C中读取文件时跳过一行

我有一个问题,我没有找到一个有效的解决方案。 这很容易,但我不明白该怎么做。

我有一个包含一些行的文件,例如:

#comment #comment icecream 5 pizza 10 pie 7 #comment tortillas 5 fajitas 5 

我希望我的程序只读取不以#开头的行。

 FILE *pf; char first [20], second [20]; pf = fopen("config.conf", "r"); if (pf) { while (! feof(pf)) { fscanf(pf, "%s t ", first); while(!strcmp(first,"#")){ `HERE I NEED JUMP TO NEXT LINE` fscanf(pf, "%s t ", first); } fscanf (pf, "%s t ", second); printf("Food: %s t Cost: %s n", first, second); } fclose(pf); } else printf( "Errore nell'aprire config.confn"); 

    如果没有读取以#开头的行,就没有真正的方法可以到达下一行。 您可以做的就是读取该数据,但忽略它。

     char ignore[1024]; fgets(ignore, sizeof(ignore), pf); 

    如果您需要读取配置文件,请使用正确的工具而不是重新发明轮子。


     while(!strcmp(first,"#") 

    是错的。 您想要过滤掉以哈希符号开头的行,而不是那些只是哈希符号的行。 而且, while(!feof(f))是错误的。 此外,如果你逐行阅读,当你可以利用fgets()时,为什么还要使用fscanf()呢?

    总而言之,整个巨大的while循环可以简化为这样的东西:

     char buf[0x1000]; while (fgets(buf, sizeof(buf), pf) != NULL) { if (buf[0] == '#') continue; // do stuff } 

    您可以通过应用%*[^n]格式说明符而不使用缓冲区跳到行尾:

     fscanf(pf, "%*[^n]"); 

    您可能希望使用strstr来查找“#”。

    请参阅说明: http : //en.cppreference.com/w/c/string/byte/strstr

      以上就是c/c++开发分享在C中读取文件时跳过一行相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/559809.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐