【发布时间】:2016-01-22 23:35:13
【问题描述】:
我正在尝试计算每行出现最多的众数或整数。
我得到一个打印两个值,然后是分段错误。
for (i = 0; i < count; i++) {
if (array[i]) {
int i, j, k, cnt = 1, p, big;
int b[MAX_NUM] = {0};
printf("count:%d\n", count);
for (i = 1; i <= array[i]; i++) {
for (j = i + 1; j <= array[i]; j++) {
if (array[i] == array[j])
printf("cnt:%d\n", cnt);
cnt++;
}
printf("cnt2:%d\n", cnt);
b[k] = cnt;
k++;
cnt = 1;
}
big = b[k];
p = 1;
for (i = 2; i <= array[i]; i++) {
if (big < b[i]) {
big = b[i];
p = i;
}
}
printf("The element that occurs offen is %d\n", array[p]);
printf("And it has occurred %d times\n", b[p]);
}
}
}
}
}
return 0;
}
编辑:
在我的代码中查看这里的外观。打印的值是文件每一行上的数字,后跟一个空行,如下所示:
1
2
3
4
5
6
5
4
5
14
62
48
14
1
3
5
7
9
123
456
789
1234
5678
34
34
34
34
34
1
1
2
2
2
2
2
3
3
4
4
4
4
5
5
6
7
7
7
1
1
Integers: 9
.....
【问题讨论】:
-
b[k]=cnt;这一行k的值是多少? (另外,你能改进一下代码格式吗?) -
也许把事情分成不同的函数,这样 gdb 可以告诉你更多。
-
你的代码真是一团糟!我重新格式化了它,它似乎有太多的右大括号...请学习如何正确缩进和间隔代码,以便其他人可以阅读。你也会帮助自己!
-
你没有初始化
k。 -
我建议使用更具描述性的变量名称。单字符变量名没有说明它代表什么。此外,像
array这样的名称仅表示其类型,而不是它的含义。有用的变量名称是良好的编码风格,有助于您和其他人的可读性。
标签: c segmentation-fault