【发布时间】:2014-10-21 21:05:38
【问题描述】:
我尝试了很多代码来尝试在直方图中显示我的数据。我已经被这个问题困扰了两天了,数据在互联网上爬行等以找到答案,但他们通常谈论指针等。虽然这是更基本的。我尝试了一个显示相同错误的实际直方图,但为了简单起见,我选择发布这个。
这是来自 The C Programming language 的程序描述: “编写一个程序来打印其输入中单词长度的直方图。” 我是水平做的,然后我会垂直做。虽然,在这个例子中,我只是想显示数字,很明显。
#include <stdio.h>
#define MAXIMUM 99
main()
{
int i, c, j, lenOfWord[MAXIMUM], charCount;
for (i = 0; i < MAXIMUM; i++)
lenOfWord[i] = 0;
printf("Starting program, please type then ctrl+d\n");
while((c = getchar()) != EOF) {
if (c == ' ') {
//new word
++lenOfWord[charCount];
charCount = 0;
}
else
//inword
++charCount;
}
printf("\n Displaying now... \n");
for (j = 0; j <= MAXIMUM; j++)
printf("%d: %d", j, lenOfWord[j]);
}
输出:
JohnJackson@linux-72db:~/Desktop> gcc c.c -o c
JohnJackson@linux-72db:~/Desktop> ./c
Starting program, please type then ctrl+d
Hello my name is john jacksonSegmentation fault
*最后的分段错误是我执行 EOF (ctrl+D) 时得到的结果
附加信息:openSUSE linux 终端中的 GCC 编译器
非常感谢,我正在努力学习 C,但我遇到了很多这样的障碍,我感到很沮丧。
【问题讨论】:
-
编译时包含所有警告和调试信息 (
gcc -Wall -Wextra -g)。使用调试器 (gdb) -
j >= MAXIMUM?这将在第一次迭代时终止你的循环。for()的第二个子句是循环终止条件。只要条件评估为“真”,循环就会继续执行。您基本上已将循环设置为失败,因为0 >= 99立即为假。 -
charCount 从未初始化,您正在尝试访问 lenOfWord[charCount]
-
对不起大家,我修复了 for 错误,但我得到了同样的分段错误
-
@user275564 您修复了哪些错误 - 为什么不使用当前不起作用的内容更新问题?