【问题标题】:Character counting of input in C [duplicate]C中输入的字符计数[重复]
【发布时间】:2018-09-22 13:48:06
【问题描述】:

这是我写的代码:

 int main()
 {

    int nc;
    nc=0;

    while(getchar()!=EOF)
    {
        ++nc;    
        printf("%i\n",nc);
    }
    return 0;
}

输出列出了 1、2、3 等字符的数量,而不是给出总数。删除包含 while 循环的大括号或将 'printf' 语句放在循环之外会导致根本没有输出。

【问题讨论】:

  • 您在读取每个字符后打印一个计数器。第三个应该是你的“回报”。你期望的输出是什么?
  • 欢迎来到 Stack Overflow。请尽快阅读AboutHow to Ask 页面。您应该在问题中显示您的代码 - 以及输出。请不要使用指向纯文本图像的链接。请直接在问题中显示您的代码 - 使用编辑框上方的 {} 按钮将代码缩进为代码。显示代码后,您的问题很容易解决;当我们看不到您的代码时无法修复(除了观察您在循环内打印并且应该在循环外打印)。
  • 你的问题是你不知道如何生成EOF

标签: c


【解决方案1】:

将 print 语句保留在 while 循环之外,您将获得最终输入的字符总数,而不是每次都打印。 PLUS您是否按下按钮传递EOF(Linux 中为ctrl + d)以便循环结束?

除此之外,使用 int 从 getchar() 获取值并将 while 循环更改为:

 #include<stdio.h>

 int main(void)
 {
     int i;

     while((i=getchar())!=EOF)
     {
         if(i!='\n')
             ++nc;
     }
     printf("%d\n",nc);
     return 0;
 }

否则,由于最后按下了“\n”,您将获得比实际输入多 1 的字符数。

【讨论】:

  • 感谢您的回答。但是,使用 int i 会导致读取“未使用的变量 i”的错误。此外,由于某种原因,还有另一个错误,“变量 'nc' 已设置但未使用”。
  • @SaraSethia 这些是警告而不是错误 - 很好,您只需要打印 nc
  • 非常感谢。不过我还有一个问题。为什么 While 循环需要一个 If 语句?我的意思是,为什么没有 If 语句就不能工作?
  • @SaraSethia 如果您传递EOF 字符来结束句子而不是使用换行符\n,则可以在没有if 语句的情况下使其工作。
  • 关于此的另一篇文章建议使用 ctrl+D 甚至 ctrl+Z。在我的情况下两者都不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 2021-03-23
  • 2017-07-28
  • 2011-05-03
  • 1970-01-01
相关资源
最近更新 更多