【问题标题】:reading file contents in C, keeping track of new lines在 C 中读取文件内容,跟踪新行
【发布时间】:2015-10-07 07:17:05
【问题描述】:

我正在使用 fscanf() 从 C 中的数据文件中读取字符串,并使用一直到 EOF 的循环。数据文件包含由任何空格分隔的字符串。当使用fscanf() 读入字符串时,将检查它们是否存在任何无效信息。我需要跟踪项目所在的行号,以便在检测到无效项目时显示该项目的行号。就像我说的那样,数据文件不仅仅是每行一个字符串。有什么比读取所有内容直到新行、将其拆分为单独的字符串并检查这些字符串更优雅的方法吗?我可以确定文件指针当前指向的行号吗?

【问题讨论】:

    标签: c scanf stdio file-pointer


    【解决方案1】:

    C I/O 库中没有行号计数器。您需要自己跟踪行号。

    我建议您使用fgets 一次读取一行,每次递增您的行号计数器,然后使用sscanf 从该字符串中读取项目。

    【讨论】:

    • 请注意,如果提供的缓冲区不够长,fgets 可能会读取部分行,这会破坏您的验证过程和行计数方案。您可以通过检查缓冲区末尾是否存在最终的'\n' 来检测这一点,并在检测到的部分读取时重新分配缓冲区。非标准的getline 函数会为您执行此操作,请检查您的环境是否提供它。
    猜你喜欢
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2011-05-08
    相关资源
    最近更新 更多