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