2014-10-10 87 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