我将通过K& S的“C编程语言”。 R.我正在尝试进行练习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
我明白为什么会这样。但我该如何纠正呢?
答案 0 :(得分:3)
while ((c = getchar ()) != '0')
应该是
while ((c = getchar ()) != EOF)
否则您的程序会停在第一个0
字符处,例如在1234560
。
如果最后一个输入行没有被换行终止,你也必须考虑到这一点。
EOF
。
答案 1 :(得分:1)
当您到达终止输入的0
时,您只需退出循环,而不会将最后一个单词的长度添加到直方图中。可能的解决方法是在循环后添加:
...
}
/* Take last word into account */
++result[count];
if (count > maxWordLength)
maxWordLength = count;
这当然是假设0
字符表示输入的结束而不是数据的一部分。