我有这部分代码:
for(i = 0; i < matrix->y; i++)
{
printf("3.%i - %i %i\n", i, matrix->y, matrix->x);//write correct "3.0 - 3 4"
for(j = 0; j < matrix->x; j++)
{
printf("N - %i %i\n", matrix->y, matrix->x);//never write anything
fscanf(input, "%i", &grid[i][j]);
}
printf("3.%i - %i %i\n", i, matrix->y, matrix->x);//write wrong "3.0 - 3 0"
}
第一个 printf 输出 y=3 和 x=4,但它永远不会进入循环,它永远不会到达 for 循环内的第二个 printf。当我在 for 循环后的第一行写相同的 printf 时,它告诉我 y=3 和 x=0。 我在哪里做错了。
谢谢。
编辑
代码是按原样编写的。没有跳过任何行。
矩阵定义
typedef struct matrix
{
int x;
int y;
int ** grid;
} Matrix;
i 和 j 定义为
int i, j;
整个函数
Matrix * loadMatrix(char * filename)
{
Matrix * matrix;
FILE * input;
input = fopen(filename, "r");
if (input == NULL)
printError (ERR_READFILE);
else
{
fscanf(input, "%i", &(matrix->y));
fscanf(input, "%i", &(matrix->x));
int i, j;
int grid[matrix->y][matrix->x];
matrix->grid = grid;
printf("2 - %i %i\n", matrix->y, matrix->x);
for(i = 0; i < matrix->y; i++)
{
printf("3.%i - %i %i\n", i, matrix->y, matrix->x);
for(j = 0; j < matrix->x; j++)
{
printf("N - %i %i\n", matrix->y, matrix->x);
fscanf(input, "%i", &grid[i][j]);
}
printf("3.%i - %i %i\n", i, matrix->y, matrix->x);
fclose(input);
}
return matrix;
}
最佳答案
您的程序行为未定义,因为您没有为 matrix
分配存储空间.所以任何事情都有可能发生。
在声明 matrix
后将其添加到某处(就在 fscanf
行之前似乎是最佳的):
matrix = malloc(sizeof(Matrix));
并更改声明 matrix
的行到:
Matrix *matrix = NULL;
(否则,如果 fopen
失败,您将返回垃圾。)
第二个问题是您也未能为 matrix->grid
分配适当的存储空间.函数返回后,您不能保留指向局部变量的指针。
您需要使用 malloc
创建该存储或 calloc
也。看到这个问题:How do I work with dynamic mutli-dimensional arrays in C有关如何执行此操作的示例。
您还需要注意 free
一旦您用完它们,它们都会出现。
别忘了 #include <stdlib.h>
,这是 malloc
所必需的和 free
.
关于c - For 循环 - 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7650266/