水平频率直方图的问题

时间:2017-03-10 11:14:04

标签: c arrays for-loop histogram

编码时遇到很多问题。对于任何错误的错误道歉。我试图对阵列中的整数频率进行简单的水平直方图。无论打印出来的是什么都不正确并且无限循环。我相信问题在于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");
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于

 for (j = 0; j < list[i]; j++)

当你尝试使用list[i]时,但根据传递的参数,该值是不确定的。因此,在这种情况下,这将调用undefined behavior并且循环变得混乱。

详细说明,您已将int hist[10];定义为局部变量并且未初始化它,因此所有成员都包含不确定的值。然后,继续将数组传递给printHistogram(),在其中,您通过list接收它,然后取消引用并希望神奇地得到一些有效值,这是不可能的。

OTOH,您正在list内的main()内扫描值而不使用它。您需要进行一些更正,以便稍后使用扫描值,这似乎是实际目标。