我在打印结构数组时遇到问题。它初始化如下:
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 for循环为数组填充值。
while ( fscanf ( fp, "%d/%d%c", &index, &separateInt, &separateChar) == 3) {
for(int i = 0; i < 12; i++){
tokens[index][i].state = separateInt;
}
}
答案 0 :(得分:1)
你说
它被初始化为
struct matrix tokens[nbrState][12];
但是上面的声明并没有初始化任何东西(除非你的数组是用静态存储持续时间声明的)。以这种方式声明的本地数组将在开头包含垃圾。那显然是你在打印的东西。
如果您希望阵列已初始化,则必须自行初始化。例如,这个声明
struct matrix tokens[nbrState][12] = { 0 };
将使用零初始化所有内容,假设nbrState
是常量。
如果nbrState
不是常数,那么您将无法在声明中使用= { ... }
初始值设定项。您必须手动,使用循环或以其他方式为数组元素分配初始值。