在 C 中计算大小写字母的问题

Issue with counting upper and lower letters in C

我编写了一个程序,它应该计算大小写字母和其他符号,但是当我单击 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;
}

Ctrl+C 发送 SIGINT 通常只是终止您的应用程序。

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

编辑: 请注意,在 Windows' 默认值 shell 上,您可能需要 Enter, Ctrl+Z, Enter(或F6 ) 而不是(尽管 Ctrl+Z 完全在 Linux shells 中做了其他事情,发送 SIGSTOP).见 this question.

您也可以与 0xD 而不是 EOF 进行比较以捕获 Enter,或者使用 0x1B 来捕获 Esc。这样你就避免了如何在不同平台上触发输入结束的怪异(除非你想处理输入流)。

另请查看 above as well as ,其中包含我遗漏的重要附加信息!

CherryDt 已经给出了合适的答案。


但补充一点,EOF 不是一个字符,而是一个结尾条件。它可能是 OS 依赖的。您不能指望它在每个环境中都以相同的方式工作。我的建议是使用 任何字符 本身作为终止循环的条件,而不是依赖于环境的条件。

注意 :仅当我包含fflush(stdin);getchar() 之后。可能 getchar() 接受您提供的输入并在输入流中留下换行符 \n ,这在我尝试使用 ctrl+[=31 终止时导致问题=]D或ctrl+ZF6

但是一旦包含 fflush(stdin),问题就会解决,现在当我在 Windows 上使用 F6 时程序成功结束。如果这对您不起作用,您也可以尝试使用上述键。

希望这对某些 Windows 用户有所帮助,如果上述答案对他们不起作用的话。