测试空格时,C字数计算程序失败

测试空格时,C字数计算程序失败,c,C,我创建了一个简单的字数计算程序(“word”:不包含空格字符的字符序列)。我的想法是每当程序得到一个字符ch时,计算一个单词,这样ch就不是空白字符,而是ch前面的字符,称之为pre\u ch是空白字符 以下程序无法正常工作(nw仍停留在0): (删除pre\u ch的制表符和换行符选项),程序可以运行。我不知道为什么。虽然这看起来很自然,但在编写以下代码时,编译器并不理解您的意图: if ((ch != (' ' || '\t' || '\n')) &&

我创建了一个简单的字数计算程序(“word”:不包含空格字符的字符序列)。我的想法是每当程序得到一个字符
ch
时,计算一个单词,这样
ch
就不是空白字符,而是
ch
前面的字符,称之为
pre\u ch
是空白字符

以下程序无法正常工作(
nw
仍停留在
0
):


(删除
pre\u ch
的制表符和换行符选项),程序可以运行。我不知道为什么。

虽然这看起来很自然,但在编写以下代码时,编译器并不理解您的意图:

   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()
虽然看起来很自然,但在编写以下代码时编译器并不理解您的意图:

   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()
,这一个有几十个副本,但它们太难找到<代码>| |不像列表那样工作,它像条件列表的分隔符一样工作<代码>通道!=''&&ch!='\t'&&ch!='\n'等等。
如果(!isspace(ch)和&isspace(pre_ch))
这一个有几十个副本,但它们太难找到<代码>| |不像列表那样工作,它像条件列表的分隔符一样工作<代码>通道!=''&&ch!='\t'&&ch!='\n'等等。
如果(!isspace(ch)和&isspace(pre_ch))