我对编程总体上还是很陌生,所以请忍受我的知识不足。
我现在已经花了几个小时进行练习1-13。我终于决定查找答案,我在此链接中找到了答案https://github.com/ccpalettes/the-c-programming-language-second-edition-solutions/blob/master/Chapter1/Exercise%201-13 /word_length.c。
因为我不想为了学习而完全复制它,所以我试图理解代码然后重新制作。(这导致了几乎完整的副本,但我比其他人更了解。)
这是我到目前为止所拥有的:
#include <stdio.h>
#define IN 1
#define OUT 0
#define LARGEST 10
main()
{
int c, state, l, i, j;
int length[LARGEST + 1];
for (i = 0; i <= LARGEST; ++i)
length[i] = 0;
state = OUT;
while ((c = getchar()) != EOF) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
if (state == OUT) {
l = 0;
state = IN;
}
++l;
}
else
if (state == IN) {
if (l <= LARGEST)
++length[l - 1];
//minus 1 because the nth term of an array is actually array[n-1]
else //if (l > LARGEST)
++length[LARGEST];
state = OUT;
}
if (c == EOF)
break;
}
for (i = 0; i <= LARGEST; ++i) {
if (i != LARGEST) //because array[10] refers to the 11th spot
printf("\t %2d |", i + 1); //plus one because 1st is array [0]
//this actually results in 1-10 because the 0-9 plus one makes the highest 10
else
printf("\t>%2d |", LARGEST);
for (j = 0; j < length[i]; ++j)
putchar('x');
putchar('\n');
}
return 0;
}
请忽略我的评论。它们是为我准备的,因此我可以向自己解释该程序。
我有两个我无法解决的问题,它们使我发疯:
输出总是比输入少一个字,这意味着“我的名字不是鲍勃”会导致:
...
2 |xx
3 |x
4 |x
...
另外,我不明白程序结束时发生了什么。具体来说,我在这里不明白为什么使用变量j
:
for (j = 0; j < length[i]; ++j)
putchar('x');
非常感谢您的帮助,对于社区来说,这对于初学者来说还是很抱歉的。
好吧,由于问题尚未解决,尝试总结所有答案。首先,我们需要更正main()行:
int main(void) {
...
return 0;
}
该INT因为你在函数的最后返回一个值,且是必要的无效意味着函数不接受任何参数。
我已经复制了您的代码并在我的计算机上执行(Ubuntu 12.04),它运行良好。您能否提供一些示例来产生错误?
众所周知,j只是遍历向量的变量。length [i]是一个向量,在每个位置i中都拥有长度为i的单词数。例如,如果位置3的值为4,例如length [3] = 4,则意味着有4个单词的长度为3。
最后,如果可以的话,我想给你个提示。为变量选择有意义的名称是一个好习惯。您在此处链接的代码帮助我了解了程序应执行的操作。变量名称(例如长度)或定义IN,OUT或LARGEST太模糊了。
我希望到目前为止能收集所有答案,并为您提供更多帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句