我是C新手并且遇到指针和2D数组问题。我有一个文件,我想从中读取值并将它们插入到2D数组中。格式化文件使得前2位数分别是行数和列数,并且该行上的其余数字填满矩阵。目前,它会正确读取行和列值,以及第一行数字,但在此之后不会继续。出了什么问题?我假设我用指针搞砸了一些东西,或者我在C中理解2D数组时遗漏了一些东西。
代码:
#define MAXSIZE 10
FILE *fpin
..
int RdRowSize()
{
int row = 0;
fscanf(fpin, "%d", &row);
return row;
}
int RdColumnSize()
{
int col = 0;
fscanf(fpin, "%d", &col);
return col;
}
void RdMatrix(int *row, int *col, int matrix[][MAXSIZE])
{
int i = 0, j = 0;
*row = RdRowSize();
*col = RdColumnSize();
for(i ; i < *row ; i++) {
for(j ; j < *col ; j++) {
fscanf(fpin, "%d", &matrix[i][j]); /* this stops after i = 0 for some reason? */
}
}
}
void PrMatrix(int row, int col, int matrix[][MAXSIZE])
{
int i = 0, j = 0;
for (i ; i < row ; i++) {
fprintf(stdout," ");
for (j ; j < col ; j++) {
fprintf(stdout, "%5d ", matrix[i][j]);
}
fprintf(stdout, "\n");
}
fprintf(stdout, "\n");
}
int main()
{
int A[MAXSIZE][MAXSIZE];
int rowA = 0, columnA = 0;
RdMatrix(&rowA, &columnA, A);
PrMatrix(rowA, columnA, A);
..
}
fpin的内容:
3 3 0 6 4 2 2 5 4 5 0
其中应该读取rowA = 3,rowB = 3(它确实如此)然后用剩余的数字填充矩阵,但它在第一行之后停止。当我打印矩阵时,我得到了这个:
**** MATRIX **** Size = 3 x 3
0 6 4
答案 0 :(得分:8)
你的内部for循环从不重复,因为你没有将j重置为0。
for(i=0 ; i < *row ; i++) {
for(j=0 ; j < *col ; j++) {
fscanf(fpin, "%d", &matrix[i][j]); /* this stops after i = 0 for some reason? */
}
}
这应解决问题,并允许后面的行工作。
答案 1 :(得分:3)
您需要在内循环中将j
设置为零
for(j = 0 ; j < *col ; j++) {
答案 2 :(得分:3)
问题是j的初始化。每次启动j循环时,都需要将j初始化为零。
for (j = 0 ; j < *col ; j++)
会做的伎俩。