【发布时间】:2016-02-07 05:39:20
【问题描述】:
我之前发布过关于我的 C 程序中的运行时错误,但现在我遇到了另一个代码问题。我的程序运行良好,没有任何错误,但无论输入什么,它总是打印 0。我花了过去 4 个小时试图弄清楚为什么我的代码会这样做,但我没有运气。如果有人能帮帮我,我将不胜感激。
我的程序接受一个整数序列的输入,使用另一个类似 scanf 的程序。 Getint() 读取整数序列的输入,并在达到 EOF (-1) 时停止读取输入。序列中的整数个数为 1000。
// ar_max(a[]) returns the max entry of a
int ar_max(int a[]) {
int max_so_far = a[0];
for (int i = 1; i < 1000; i++) {
if (a[i] > max_so_far) {
max_so_far = a[i];
}
}
return max_so_far;
}
int main() {
int inputnum = getint();
// array containing the distinct numbers seen
int a_num[1000] = {};
// array containing the frequencies of the distinct numbers seen
int a_freq[1000] = {};
int len_n = 0;
while (inputnum != EOF) {
int i = 0;
len_n = i + 1;
int len_f = len_n;
// update the frequency of inputnum if it's already been seen
for (i = 0; i < len_f; i++, len_n += 1) {
if (a_num[i] == inputnum) {
a_freq[i] = a_freq[i] + 1;
}
}
// add inputnum into the array if it hasn't already been seen
if (i == len_n) {
a_num[i+1] = inputnum;
a_freq[i+1] = 1;
}
inputnum = getint();
}
// print the first number with the highest frequency
for (int j = 0; j < len_n; j++) {
if (a_freq[j] == ar_max(a_freq)) {
printf("%d\n", a_num[j]);
break;
}
}
}
例如,输入
10 20 30 20
应该是20
【问题讨论】:
-
尝试在调试器中运行并逐行执行代码。从正常输入集执行此操作有点耗时,因此请使用较小的输入集进行调试。
-
请发布完整的代码,以便我们重现您的错误。我们不知道函数 getint() 做了什么
-
我只提供了getint()的接口,没有提供实现
-
我不知道如何在调试器中运行它
-
先了解如何调试。 google 上有很多教程。并将代码放在反引号内(与 ~ 相同的键)
like this使其可读
标签: c arrays loops printf user-input