编写一个程序,要求从键盘输入文本。此程序的输出应该是字符数,单词数量和已键入的换行符数量。多个连续空格不应计为多个单词。
输入关闭代码^ 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',程序没有'什么都没有。请有人帮帮我。
答案 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 == ' ')
。