【发布时间】:2014-05-20 22:13:22
【问题描述】:
[已解决] 我最近问了一个关于一些我认为我非常理解的代码的问题。
但几天后,当我回顾修订时,新的问题来自同一段代码(来自 Brian. W. Kernighnan 的 THE C PROGRAMMING LANGUAGE 第二版(ISBN-13:978-8131704943))。
代码如下:
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
int nw, c, state;
state = OUT;
nw = 0;
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT)
{
state = IN;
++nw;
}
}
printf("%d", nw);
}
所以我做了一些随机测试,发现了我无法解释或理解的东西:
-
为什么我有的时候代码不起作用
state = OUT在nw = 0之后
当我通常运行此代码时,它给了我正确的编号。单词,但是当我交换state = OUT and nw = 0 的顺序时,它总是返回等于 0 的答案,为什么会这样?
我知道顺序在 C 中很重要,但为什么只有这个特定的顺序??
2.if-else语句的简要含义是什么?
3.Acc。到书国家变种。被定义为定义 getchar 是否在一个单词中,但我不明白 state var 的确切含义。这样做??
4.另外作者使用等价和相等是什么?
我注意到他在制定条件时使用等价,否则使用等价,对吗??
谢谢...
【问题讨论】:
-
我认为您在这里错误地复制了代码。
if (c == ...之后的state == OUT;行应该使用=而不是==。 -
这个问题似乎跑题了,因为纠正错字可以解决问题。
-
对不起一个错字,(更正的脚本)但我真的很想了解这个脚本,请不要将其标记为离题......
-
不是答案,但是将 C 源文件称为脚本非常令人困惑...另外,您确定问题的第 1 部分在编辑后仍然有效吗?
-
请不要因为他的语言问题而抨击 OP。不是每个人都能说一口流利的英语。
标签: c if-statement boolean state getchar