2

我正在阅读 K & R 的“The C Programming Language”。我正在尝试做练习 1-13,以获得它输入的单词长度的直方图。以下是我尝试过的。我没有得到最后一个字的长度。我该如何纠正?

#define space ' '
#define maxLength 100
#include <stdio.h>

int main() {
  int c, result[maxLength], count, i, maxWordLength;
  count = maxWordLength = 0;
 for (i = 0; i < maxLength; ++i)
    result[i] = 0;
  while ((c = getchar ()) != '0') {
    if (!((c == space) || (c == '\t') || (c == '\n')))
        ++count;
    else {
      ++result[count];
      if (count > maxWordLength)
        maxWordLength = count;
      count = 0;
    }
  }
  for (i = 1; i <= maxWordLength; ++i)
    printf("\n%d\t%d\n", i, result[i]);
  return 0;
}

以下是我的输入

1 12
123 1234    12345
1234560

输出是这样的,它没有给出最后一个字的长度

1   1

2   1

3   1

4   1

5   1

我已经明白为什么会这样了。但是我该如何纠正呢?

4

2 回答 2

3
while ((c = getchar ()) != '0')

应该

while ((c = getchar ()) != EOF)

否则你的程序会在第一个0字符处停止,例如在1234560. 如果最后一个输入行没有被换行符终止,你也必须考虑到这一点。

EOF在文件结尾或发生读取错误时返回。

于 2013-06-21T18:17:49.787 回答
1

当您到达0终止输入时,您只需退出循环,而不会将最后一个单词的长度添加到直方图中。一个可能的解决方法是在循环之后添加这个:

   ...
}
/* Take last word into account */
++result[count];
if (count > maxWordLength)
maxWordLength = count;

这当然是假设0字符表示输入的结束并且不是数据的一部分。

于 2013-06-21T18:24:18.790 回答