C语言编写一个程序,打印输入中单词长度的直方图。我这个代码错在哪里呀,为啥不能成功呀。
【以下回答由 GPT 生成】
在这段代码中,存在两个错误导致不能成功运行。
错误1:在第一个while循环中,对单词长度的统计出现了问题。 错误原因:在每次读取一个字符后,单词长度的统计(i的增加和A数组的更新)应该在判断单词结束之后进行,而不是在每次读取一个字符时进行。否则,统计的单词长度将不正确。
解决方法:
while ((c = getchar()) != EOF)
{
i = 0;
while (c != ' ' && c != '\n' && c != '\t')
{
i++;
c = getchar(); // 读取下一个字符
}
A[i-1]++; // 对应长度的单词数量加1
}
错误2:在直方图打印部分存在问题。 错误原因:在打印每个长度的直方图时,循环的条件错误。应该是k < A[j],而不是k <= A[j]。因为A[j]表示长度为j+1的单词数量,而不是长度为j的单词数量。
解决方法:
printf("请打印直方图:\n");
for (j = 0; j < MAX; j++) // 数组的序号从0开始
{
printf("%3d: ", j + 1); // 数组的序号从0开始,但单词字符数统计从1开始
for (k = 0; k < A[j]; k++) // 数组的序号从0开始,循环条件修改为k < A[j]
{
printf("*");
}
printf("\n");
}
修改完成后的代码如下:
#include<stdio.h>
#define MAX 10
int main()
{
int c, i, j, k, r;
int A[MAX];
for (r = 0; r < MAX; r++)
A[r] = 0;
while ((c = getchar()) != EOF)
{
i = 0;
while (c != ' ' && c != '\n' && c != '\t')
{
i++;
c = getchar();
}
A[i-1]++;
}
printf("请打印直方图:\n");
for (j = 0; j < MAX; j++)
{
printf("%3d: ", j + 1);
for (k = 0; k < A[j]; k++)
{
printf("*");
}
printf("\n");
}
return 0;
}
这样修改后的代码就能够正确统计单词长度并打印直方图了。
【相关推荐】
我认为,除了一些细节上的错误,最大的错误应该是第一个双循环里面内部的for循环中途遇见空会跳出循环使得程序无法继续运行下去,不知道我的想法对不对