|
|
你好!看了你的代码,问题出在单词计数的逻辑上。具体来说,在 else if (state = OUT) 这一行,你误用了赋值运算符 = 而不是比较运算符 ==。这导致 state 被错误地重新赋值,且条件始终为假,因此单词数无法正确增加。
修正方法很简单:将 else if (state = OUT) 改为 else if (state == OUT)。这样,当遇到非空白字符且当前状态为 OUT 时,才会切换到 IN 状态并增加单词数。
以下是修正后的代码:
- #include <stdio.h>
- #define IN 1
- #define OUT 0
- int main(void)
- {
- 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("\n%d %d %d\n", nl, nw, nc);
- return 0;
- }
复制代码
修改后,程序应该能正确统计行数、单词数和字符数。注意,行数统计依赖于换行符的数量,如果输入的最后一行没有换行符,则行数可能少计一行,但这与常见工具(如 wc)的行为一致。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|