C中的大、小字母计数问题

问题描述 投票:0回答:1

我写了一个程序,应该计算大小写字母和其他符号,但是除了按Enter键,然后按^C(EOF)的时候,什么都算。我不知道如何跳过它,希望有人能帮我一下<3。

#include <stdio.h>
#include <ctype.h>

int main()
{
  char ch;
  int uppers = 0, lowers = 0, others = 0;


  while((ch = getchar()) != EOF)
  {
    if(islower(ch))
      lowers++;

    else if(isupper(ch))
      uppers++;

    else
      others++;
  }

  printf("\n\nUpper letters - %d  Lower letters - %d   Others- %d", uppers, lowers, others);


  return 0;
}
c while-loop counter
1个回答
5
投票

按Ctrl+C 发出 SIGINT 通常只会终止你的应用程序。

你需要的是 Ctrl+D,从而触发EOF。

EDIT: 请注意,在Windows的默认shell中,你可能需要用到 进入, Ctrl+Z, 进入 (或 F6)来代替(虽然 Ctrl+Z 在Linux shell中做了一些完全不同的事情,发送一个 SIGSTOP). 见 这个问题.

你也可以对比一下 0xD 而不是 EOF 捕捉 进入或者使用 0x1B 这将抓住 Esc. 这样你就避免了如何在不同平台上触发输入端的怪异现象(除非你想处理一个输入流)。

也可以看看 此话 以上以及 本回答 其中包含了我所遗漏的重要补充信息!


1
投票

CherryDt已经提供了一个适当的答案。


但只是想补充一下。EOF不是一个字符 反倒 条件. 它可能依赖于操作系统。你不能依赖它在每个环境中以同样的方式工作。我的建议是使用 任意字 本身就是一个终止循环的条件,而不是一个依赖于环境的条件。

: 用钥匙结束程序的解决方案对我来说是可行的。窗口 只有当我加入 fflush(stdin); 之后 getchar(). 也许吧 getchar() 接受您的输入,并留下换行符。\n 的输入流中,当我试图使用这种方法终止时,就会产生问题。按键+D按键+ZF6.

但一旦你包括 fflush(stdin)这将解决这个问题,现在,当我使用的是 F6 在Windows上。如果这对你不起作用,你也可以用上面提到的键试试。

希望这能帮助一些Windows用户,如果上面的答案对他们不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.