2014-10-10 86 views
-1

我遇到了打印出結構數組的問題。它被初始化像這樣:Struct數組正在打印垃圾

struct matrix tokens[nbrState][12];

然後我嘗試使用此代碼打印出來:

printf("%d", tokens[0][0].state); 
    for(int q = 0; q < nbrState; q++){ 
      for(int r = 0; r < 12; r++){ 
        printf("%d", tokens[q][r].state); 
      } 
    } 

它如何以往只是還給

160833216083325909500442637211181530452359314445659095247095039827295039732859091035295039760059091066417471141950397584105931452485931525045870278695909110245869685280135590599950397784950397744593145248159314402459314316859095284905931452481590950044135934508013593144456590952470095039760058696836095039787258698266456147669503978565869965120593144552593143168419536358702168841950960596593143168950398056950398016593144552159315536059315450459095284905931445521015931545041048576587404166341899271605931553609503978729503978563593450804195363-1141298268758698266459314316800419611295039881600950398592587297673016950398176950397984091005908849605884315520000050-100950398592419 

而且我不知道爲什麼。我也用這個for循環來填充數組。

while (fscanf (fp, "%d/%d%c", &index, &separateInt, &separateChar) == 3) { 
    for(int i = 0; i < 12; i++){ 
      tokens[index][i].state = separateInt; 
      } 
    } 
+0

那麼,你的循環從輸入文件中讀取'index'值。是什麼讓你讀過的東西說'0'作爲索引?我無法從這裏看到您的文件輸入文件的內容。沒人能。我們應該如何知道哪些「索引」值在那裏,哪些不是?此外,你確定你的初始化週期甚至運行? – AnT 2014-10-11 00:08:02

回答

1

你說

它被初始化像這樣

struct matrix tokens[nbrState][12]; 

但上述聲明並不初始化什麼(除非你的陣列與靜態存儲期限申報) 。以這種方式聲明的本地數組在開始時將包含垃圾。這顯然是你正在打印。

如果你想要你的數組初始化,你必須自己初始化它。例如,這個聲明

struct matrix tokens[nbrState][12] = { 0 }; 

將初始化爲零的一切,假設nbrState是一個常數。

如果nbrState不是常數,那麼在聲明中將不能使用= { ... }初始值設定項。您必須手動將初始值分配給數組元素,使用循環或以其他方式。

+0

程序運行後,nbrState將保持不變。但可以根據文件的輸入進行更改。 – user2835532 2014-10-10 23:28:06

+0

我有一個for循環來爲數組添加值。然後我嘗試打印它們。 – user2835532 2014-10-10 23:32:35

+0

@ user2835532:那麼,你的循環從輸入文件中讀取'index'值。是什麼讓你讀到的東西,比如'0'作爲'index'?我無法從這裏看到您的文件輸入文件的內容。沒人能。我們應該如何知道哪些「索引」值在那裏,哪些不是?此外,你確定你的初始化週期甚至運行? – AnT 2014-10-11 00:07:27