qzy475739546 2023-03-27 14:01 采纳率: 85.7%
浏览 41
已结题

如何在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 <stdio.h>

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 <stdio.h>

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;
}

  • 写回答

2条回答 默认 最新

  • Vayne16 2023-03-27 14:03
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单