c - 从 C 文件中打印特定行

标签 c windows file

因此,我正在编写一个小实用程序来帮助我更有效地读取一些文件,因此该程序会打开一个文件,然后打印从第 12 行到结尾的所有内容。我正在使用 Windows。到目前为止,这是我的代码:

FILE* file = fopen(argv[1], "rb");
    char chr;
    long long ln = 1;
    if (file) {
        while ((chr = fgetc(file)) != -1) {
            if (chr == '\n') ln += 1;
            if (ln >= 12)
                printf("%c", chr);
        }
        fclose(file);
        return 0;
    }
    else {
        return 1;
    }

但每次我运行程序时,它都会给我这样的信息:

X:\example>readln document.txt

line 12
line 13
line 14
...

正如您所看到的,由于某种原因,它总是无缘无故地在开头有这个空行。请帮我解决这个问题。

最佳答案

两个错误:

首先,fgetc() 返回一个 int,而不是一个 char,因为它需要返回每个可能的字符值以及附加值 EOF。该值通常为 -1,但由于您将返回值截断为 char,程序也会在遇到字符 0xFF 时停止(对于文本文件它可能永远不会这样做,因此这个错误隐藏得很好)。

其次,您在看到 '\n' 时增加行号,然后一次打印一个字符。当到达第 12 行时,将在第 11 行末尾打印 '\n'。在打印后将增量向下移动一行。

关于c - 从 C 文件中打印特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46854012/

相关文章:

c - C 中的 For 循环和数组

c - 如何获取和比较 libcurl 版本?

c# - 最小化WPF中的窗口?

c++ - c语言中**ptr是什么意思

c - VS 2019 中导致 MSB6006 "CL.exe"退出并显示代码 2 的原因

java - Java中获取文件的描述信息

windows - 重定向 ShellExecute 的进程标准输出(或其他提升和重定向的方式)

file - 如何执行文件系统扫描

c++ - 在 C++ 中使用 MPI 解析大文件

c - 如何将文本文件传递到c中的数组中?