C编程语言练习1-13

C编程语言练习1-13,c,C,我正在浏览K&R的C编程语言。我正在做练习1-13,以获得it输入的字长直方图。下面是我试过的。我不知道最后一个字的长度。 我如何纠正这个问题 #define space ' ' #define maxLength 100 #include <stdio.h> int main() { int c, result[maxLength], count, i, maxWordLength; count = maxWordLength = 0; for (i = 0; i &l

我正在浏览K&R的C编程语言。我正在做练习1-13,以获得it输入的字长直方图。下面是我试过的。我不知道最后一个字的长度。 我如何纠正这个问题

#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   1

2   1

3   1

4   1

5   1
我明白为什么会这样。但我该如何纠正它呢

while ((c = getchar ()) != '0')
应该是

while ((c = getchar ()) != EOF)
否则,程序将在第一个0字符处停止,例如1234560。 如果最后一个输入行没有被换行符终止,你也必须考虑到这一点

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

应该是

while ((c = getchar ()) != EOF)
否则,程序将在第一个0字符处停止,例如1234560。 如果最后一个输入行没有被换行符终止,你也必须考虑到这一点

EOF将在文件结尾或出现读取错误时返回。

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

   ...
}
/* Take last word into account */
++result[count];
if (count > maxWordLength)
maxWordLength = count;
当然,这是假设0字符表示输入的结束,而不是数据的一部分。

当到达结束输入的0时,您只需退出循环,而不将最后一个单词的长度添加到直方图中。一个可能的修复方法是在循环后添加此选项:

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

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

如果最后一个字的大小小于MaxWordLength?啊,为真,则应为count,然后固定。如果在最后一个字之后和终止0之前有空格,程序现在将增加长度为0的字的计数,但这是一个你不使用的值,所以这并不重要;对吗?对,否则如果最后一个字是文件中最长的字,则maxWordLength将不正确。如果最后一个字的大小小于maxWordLength?啊,为真,则应计数,然后修复。如果在最后一个字之后和终止0之前有空格,程序现在将增加长度为0的字的计数,但这是一个你不使用的值,所以这并不重要;对吗?对,否则如果最后一个字是文件中最长的字,maxWordLength将不正确。