如何在UNIX操作系统中,一般有ctrl+d作为文件结束标记,其字符码为-1.当输入ctrl+d时表示文件输入结束?

*对输入的行和字符进行计数。在计算机中,一行是以一个回车符\n作为行结束标记的,这样在程序中可以通过搜索\n对行进行计数。在UNIX操作系统中,一般有ctrl+d作为文件结束标记,其字符码为-1.当输入ctrl+d时表示文件输入结束,停止计数。在C语言中,以EOF(End Of File)作为文件结束标志
**输出格式要求:"chars=%d, lines=%d\n"
为什么以下两个程序运行结果不同(第一个正确,第二个错误)

#include 

int main (void)
{
    int lines = 0;
    int chars = 0;
    char ch;

    while ((ch=getchar ()) != EOF)
    {
        chars ++;

        if (ch == '\n')
        {
            lines ++;
        }
    }

    printf ("chars=%d, lines=%d\n", chars, lines);

    return 0;
}

#include 

int main (void)
{
    int lines = 0;
    int chars = 0;

    while (getchar () != EOF)
    {
        chars ++;

        if (getchar() == '\n')
        {
            lines ++;
        }
    }

    printf ("chars=%d, lines=%d\n", chars, lines);

    return 0;
}

第一个程序正确,因为它使用了一个变量ch来存储每次输入的字符,并且在每次循环中检查ch是否为EOF,如果不是,则计算字符数,并且检查是否为换行符,如果是,则计算行数。

第二个程序错误,因为它每次循环中调用了两次getchar()函数,第一次调用用于检查是否为EOF,第二次调用用于检查是否为换行符,但是第二次调用会把第一次调用的字符覆盖掉,导致程序无法正确计算字符数和行数。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^