我创建了一个简单的单词计数程序(“单词”:不包含空格字符的字符序列)。我的想法是在程序获得一个字符ch
时计算一个单词,使ch
不是空白字符,但ch
之前的字符,称之为pre_ch
是一个空白角色。
以下计划效果不佳(nw
仍然停留在0
):
/* Program to count the number of words in a text stream */
#include <stdio.h>
main()
{
int ch; /* The current character */
int pre_ch = ' '; /* The previous character */
int nw = 0; /* Number of words */
printf("Enter some text.\n");
printf("Press ctrl-D when done > ");
while ((ch = getchar()) != EOF)
{
if ((ch != (' ' || '\t' || '\n')) &&
(pre_ch == (' ' || '\t' || '\n')))
{
++nw;
}
pre_ch = ch;
}
printf("\nThere are %d words in the text stream.\n", nw);
}
但是,如果我将if
子句更改为:
if ((ch != (' ' || '\t' || '\n')) &&
(pre_ch == (' ')
(删除pre_ch
的标签页和换行符选项),该程序有效。我不明白为什么。
答案 0 :(得分:4)
虽然看起来很自然,但编写时你不会理解你的意图:
if ((ch != (' ' || '\t' || '\n')) &&
(pre_ch == (' ' || '\t' || '\n')))
相反,你需要写:
if ((ch != ' ' || ch != '\t'|| ch != '\n') &&
(pre_ch == ' ' || pre_ch == '\t' || pre_ch == ’\n'))
那就是说,您可能希望在ctype.h中查看isspace()