2015-11-26 117 views
0

我不知道我在做什麼錯在這裏,但我試圖根據通過使用getchar()(C編程語言練習之一)的commad行輸入的字符串的長度來製作垂直直方圖程序,但是我運行它時似乎出錯了。函數printgraph()應該使用通過打印圖形graph[][]所示的for循環逐行打印直方圖,其中j遞增y軸並且i遞增x軸。但是,當我運行這個時,圖形到達這行代碼時不會打印。我已經修改了代碼並多次修改了代碼,但仍然沒有任何線索。我知道這對一些人來說可能也是一個微不足道的問題,我很抱歉我缺乏經驗,但是所有的幫助都是值得讚賞的。程序不會執行函數嗎?

#include <stdio.h> 

char graph[11][11]; 

void printgraph(){ 
    int i, j; 
    char graph[11][11]; 
    for(j = 0; j<=10; j++){ 
     for(i = 0; i<=10; i++){ 
      putchar(graph[i][j]); 
     } 
     printf("\n"); 
    } 
} 
int main(){ 
    char c, graph[11][11]; 
    int i, j, onoroff, numchar[10]; 
    for(i = 10; i>=0; i--) 
     graph[0][i] = i; 
    for(j=10;j>=0; j--) 
     graph[j][0] = j; 
    for(j=0;j<=9;i++) 
     numchar[j] = 0; 
    onoroff = 1; 
    i = 0; 
    while(graph[1][10] != 'O' || graph[2][10] != 'O' || graph[3][10] != 'O' || graph[4][10] != 'O' || graph[5][10] != 'O' || graph[6][10] != 'O' || graph[7][10] != 'O' || graph[8][10] != 'O' || graph[9][10] != 'O' ||graph[10][10] != 'O'){ 
     while((c = getchar()) != EOF){ 
      printgraph(); 
      if(c == ' '|| c == '\n' || c == '\t'){ 
       if(onoroff == 1){ 
        numchar[i]++; 
        graph[i][numchar[i]+1] = 'O'; 
       } 
       onoroff = 0; 
       i = 0; 
      }else if(onoroff == 1){ 
       i++; 
      }else if(onoroff == 0){ 
       onoroff = 1; 
       i++; 
      } 
     } 
    } 
    return 0; 
} 
+4

不要在函數內部重新聲明全局變量。更好的是,完全避免全局變量。將參數傳遞給函數。 –

回答

2

它從來沒有達到printgraph函數,因爲你陷入了第三個for循環。

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

您遞增i但在測試j

也看到NPToita

1

的答案,那是因爲你有3個變量的命名圖; 全局圖變量從不使用,因爲主函數有它自己的局部變量圖,它寫入並且printgraph具有它讀取的自己版本的圖變量。

你可以嘗試從主函數和printgraph函數中刪除圖形變量聲明,看看會發生什麼?

+0

或者您可以使用n.m.的建議。 – NPToita