【问题标题】:C++ use a while loop to count the number of characters a user inputsC ++使用while循环来计算用户输入的字符数
【发布时间】:2018-01-22 01:57:27
【问题描述】:

编写一个程序,要求从键盘输入文本。这个程序的输出应该是字符的数量、单词的数量和已输入的换行符的数量。多个连续空格不应计为多个单词。

当输入关闭代码^D (CTRL + D)时,可以停止从键盘读取字符

我的代码是:

int main()
{
    char a;
    int characters = 0;
    int words = 1;
    int newlines = 0;
printf("Input something\n");

while ((a = getchar())!=4)
{
    if (a >= 'a'&&a <= 'z' || a >= 'A'&&a <= 'Z')
        characters++;
    else if (a = ' ')
        words++;
    else if (a = '\n')
        newlines++;

}
printf("The number of characters is %d\n", characters);
printf("The number of words is %d\n", words);
printf("The number of newlines is %d\n", newlines);


return 0;
}

我知道 ^D 的 ASCII 值是 4,但在我使用 (a=getchar())!=4 并在屏幕上输入一些单词和 ^D 后,按“回车”,程序没有不显示任何东西。谁能帮帮我。

【问题讨论】:

  • 因为是c++功课,我觉得C和C++的基础知识差不多
  • 完全没有@一帆
  • 好吧,可能因为我是新手,你能告诉我为什么我的代码不正确
  • 问题要求多个连续的空格不应该算作多个单词。在我的代码中,我无法将多个连续空格作为一个空格。

标签: c++ stdin eof


【解决方案1】:

问题未说明的关于处理 CtrlD 的关键点是,击键是控制台程序的 EOF(文件结束)指示器。这意味着当你键入 CtrlD 时,getchar() 不会返回 4,而是返回特殊值 EOF

请注意,EOF 的值不是可以放入 char 变量中的值,因此您必须声明 int a 而不是 char a

int a;

while ((a = getchar()) != EOF)

【讨论】:

  • 谢谢 Greg,我刚刚尝试了你的代码。但是在这种情况下,如果我运行这个程序并输入一些东西,我无法跳出循环(无论我输入什么,屏幕都没有显示结果,例如字数)
【解决方案2】:

根据定义,EOF 没有 ASCII 值。 K&R 告诉我们

getchar 在没有更多输入时返回一个独特的值,a 不能与任何真实字符混淆的值。

因此,您必须与符号常量 EOF 进行比较。它的值是一个超出有效 ASCII 码范围的值。

while ((c = getchar()) != EOF)

另外,c 必须是 int,而不是 char;这样,EOF 就适合了。

您程序中的另一个问题是您使用=(赋值)而不是==(比较)。你写的是else if (a = ' '),但意思是else if (a == ' ')

【讨论】:

  • 谢谢。我试过EOF和int c,但我不知道如何结束输入。无论我输入什么,屏幕都没有显示字数等结果。即使我按下了“回车”,它也只是开始换行。
猜你喜欢
  • 2011-12-29
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多