编码时遇到很多问题。对于任何错误的错误道歉。我试图对阵列中的整数频率进行简单的水平直方图。无论打印出来的是什么都不正确并且无限循环。我相信问题在于printHistogram功能。有什么提示吗?
这是代码:
#include <stdio.h>
//Prints histogram to screen using horizontal bar chart
void printHistogram ( int *hist, int n );
int main ( void )
{
int i, n;
printf ("How many values for array? ");
scanf ("%d", &n);
int list[n];
for (i=0; i < n; i++) {
printf ("Enter value: ");
scanf ("%d", &list[i]);
}
// Process data to compute histogram
int hist[10];
// Print histogram
printHistogram ( hist, 10);
return 0;
}
void printHistogram ( int *list, int n )
{
int i, j;
for (i=0; i < n; i++) {
printf ("[%d] ", i);
for (j = 0; j < list[i]; j++)
printf ("*");
printf ("\n");
}
}
答案 0 :(得分:1)
问题在于
for (j = 0; j < list[i]; j++)
当你尝试使用list[i]
时,但根据传递的参数,该值是不确定的。因此,在这种情况下,这将调用undefined behavior并且循环变得混乱。
详细说明,您已将int hist[10];
定义为局部变量并且未初始化它,因此所有成员都包含不确定的值。然后,继续将数组传递给printHistogram()
,在其中,您通过list
接收它,然后取消引用并希望神奇地得到一些有效值,这是不可能的。
OTOH,您正在list
内的main()
内扫描值而不使用它。您需要进行一些更正,以便稍后使用扫描值,这似乎是实际目标。