K&R 1.5.4,任何人都可以解释一下这个代码示例中的 else if 吗?
K&R 1.5.4, can anyone explain the else if in this code example?
我正在痛苦地完成 K&R 第二版。我不清楚示例 1.5.4 中的最终 if(else if)在做什么。
include stdio.h
define IN 1
define OUT 0
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
是不是说:如果state是OUT,那么就把state改成IN,+1到nw在任何情况下都是
或
如果状态为 OUT,则什么也不做,否则将状态更改为 IN,如果状态为 IN,则将 +1 更改为 nw
文中的注释是:'[...] else 之后的 [statement] 是一个 if 控制两个大括号中的陈述。
出于某种原因,我很难了解那里发生的事情。谁能帮忙?每次看都脑子发凉
如果您遇到以下任何情况:space
或 tab
或 newline
然后它会将您的 position/state 设置为 OUT
这表明您是当前不在某些文本中间(例如 asd673r23@#$#
),这意味着您刚刚在字符串中找到了另一个词,因此它增加了总数。单词数增加 1.
这让我发疯,没有人回答我需要的东西..但确实指导了我!这是新手容易混淆的部分。
这两个状态 == out 应该独立看待。
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
第一个状态 = out 将状态设置为 out。而第二个 else if 以 state == out 开始,因为 out 之前已初始化为 0。第一部分中的 state = out 不会转移到 else if 语句。 else if 发生而不是。希望这对某人有所帮助,如果我错了请纠正我。
我正在痛苦地完成 K&R 第二版。我不清楚示例 1.5.4 中的最终 if(else if)在做什么。
include stdio.h
define IN 1
define OUT 0
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
是不是说:如果state是OUT,那么就把state改成IN,+1到nw在任何情况下都是
或
如果状态为 OUT,则什么也不做,否则将状态更改为 IN,如果状态为 IN,则将 +1 更改为 nw
文中的注释是:'[...] else 之后的 [statement] 是一个 if 控制两个大括号中的陈述。
出于某种原因,我很难了解那里发生的事情。谁能帮忙?每次看都脑子发凉
如果您遇到以下任何情况:space
或 tab
或 newline
然后它会将您的 position/state 设置为 OUT
这表明您是当前不在某些文本中间(例如 asd673r23@#$#
),这意味着您刚刚在字符串中找到了另一个词,因此它增加了总数。单词数增加 1.
这让我发疯,没有人回答我需要的东西..但确实指导了我!这是新手容易混淆的部分。 这两个状态 == out 应该独立看待。
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
第一个状态 = out 将状态设置为 out。而第二个 else if 以 state == out 开始,因为 out 之前已初始化为 0。第一部分中的 state = out 不会转移到 else if 语句。 else if 发生而不是。希望这对某人有所帮助,如果我错了请纠正我。