TL; DR:在二维数组中苦苦挣扎。
我正在尝试从文本文件的整数列表中创建两个二维数组。这是用C编程的。
tester.txt包含:
2 1 2 3 4 5 6 7 8
第一个数字表示两个数组都有2行和2列,如果是任何其他数字,则列/行将表示为这样。
tester.txt应该输出以下内容:
1 2 5 6
3 4 7 8
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i,j,k;
FILE *filepointer;
int nrows;
int size;
fputs("Enter a filename: ", stdout);
fflush(stdout);
if ( fgets(filename, sizeof filename, stdin) != NULL )
{
char *newline = strchr(filename, '\n'); /* search for newline character */
if ( newline != NULL )
{
*newline = '\0'; /* overwrite trailing newline */
}
printf("filename = \"%s\"\n", filename);
}
filepointer=fopen(filename,"r");
fseek(filepointer, 0, SEEK_END); // seek to end of file
size = ftell(filepointer);
printf("Size=%d\n",size);
fseek(filepointer, 0, SEEK_SET);
int holderarray[size];
for(i=0; i<size; i++)
fscanf(filepointer, "%d", &holderarray[i]);
nrows=holderarray[0];
printf("Number of rows/columns=%d\n",nrows);
if (filepointer == NULL)
{
fprintf(stderr, "Can't open input file in.list!\n");
exit(1);
}
}
到目前为止,一切都按预期工作。我无法想象如何将前半部分值添加到新的二维数组中,希望你们可以提供帮助。这是我在代码块中的头脑风暴。
int matrix1[nrows][nrows];
int matrix2[nrows][nrows];
for (i=1; i<sizeof(holderarray);i++)
{
for (j=0;j<nrows;j++)
{
matrix[i][j]=holderarray[j];
}
for (i=0;i<sizeof(nrows);i++)
{
for (j=0;j<sizeof(nrows);j++)
{
printf("%d",matrix[i][j]);
}
}
return 0;
答案 0 :(得分:0)
你可以通过使用getc循环来获取它们
1. you read the first char in line and define the array structure , cast to integer
2. initialize the arrays eg you read 2 so 2*2 is the size of the array, 3*3 is the size of the array and number of the elements to read in every array
3. continue reading in to reach the first array bound based 2*2 = 4 3*3= 9 based on the first line.
4. fill the other array since the first array is full,
答案 1 :(得分:0)
您无法根据编译时未知的变量在标准C中动态声明数组:
int matrix1[nrows][nrows];
int matrix2[nrows][nrows];
如果您不使用C99或更高版本,您需要做的是使用为您动态分配内存的malloc函数:
int **matrix1, **matrix2;
int i;
matrix1 = malloc(nrows * sizeof(int*));
matrix2 = malloc(nrows * sizeof(int*));
for(i = 0; i < nrows; i++) {
matrix1[i] = malloc(nrows * sizeof(int));
matrix2[i] = malloc(nrows * sizeof(int));
}
C中的二维数组被视为指针的指针。每个指针都是对包含整数(即矩阵行)的连续内存块的引用,然后我们使用指向指针的指针作为对另一个连续内存块的引用,该内存块包含对第一个元素的引用/指针在所有这些行中。
此图片(不是我的图片)可能有所帮助:DYNAMIC 2D ARRAY
请注意,完成使用后,应释放此动态分配的内存:
for(int i = 0; i < nrows; i++) {
free(matrix1[i]);
free(matrix2[i]);
}
free(matrix1);
free(matrix2);