C ++使用while循环来计算用户输入的字符数

时间:2018-01-22 01:57:27

标签: c++ stdin eof

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

输入关闭代码^ 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后,按'enter',程序没有'什么都没有。请有人帮帮我。

2 个答案:

答案 0 :(得分:2)

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

请注意,值EOF不是适合char变量的值,因此您必须声明int a而不是char a

int a;

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

答案 1 :(得分:1)

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

  当没有更多输入时,

getchar会返回一个独特的值,a   不能与任何真实角色混淆的价值。

所以你必须与符号常数EOF进行比较。它的值是有效ASCII码范围之外的值。

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

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

您的计划中的另一个问题是您使用=(作业)而不是==(比较)。你写else if (a = ' ')但是else if (a == ' ')