2017-03-10 153 views
-1

我在編碼方面有許多問題C.對任何錯誤的錯誤抱歉。我試圖做數組中的整數頻率簡單的水平直方圖。無論它打印出來的東西是否有誤,都會造成無限循環。我相信問題在於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

的問題是在

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

時,你試圖用list[i],但基於參數傳遞的價值是不確定的。因此,在這種情況下,這會調用undefined behavior,並且循環不起作用。

詳細說明,您已將int hist[10];定義爲局部變量,但未對其進行初始化,因此所有成員都包含不確定的值。然後,繼續,將數組傳遞到printHistogram(),其中您通過list收到該數組,然後取消引用,並期望得到一些有價值的魔法值,這是不可能的。

OTOH,您正在掃描list中的值main()而不使用它。您需要進行一些更正,以便稍後使用掃描值,這似乎是實際的目標。

+0

那麼,如何初始化hist數組?這是用戶輸入,所以我不知道該怎麼做? – BoloShmolo

+0

@BoloShmolo傳遞'list'和'n'本身有什麼問題? –

+0

我想確保直方圖只能到10,所以我做了hist數組。你說的可能嗎? – BoloShmolo