【发布时间】:2012-11-07 03:31:32
【问题描述】:
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;
【问题讨论】:
-
您的 holder-array 正在调整为文件的字节数;不是其中的整数个数。如果这是有意作为确保您不会超出短数组的机制,那似乎有点矫枉过正。
-
哦,我不知道,如何按整数个数调整大小?
-
你没有。这是一个txt文件。您需要处理其中的字符数据,转换为您需要的本机数据类型(在您的情况下,
ints)。在读取数字字符后创造性地使用scanf()(并转换为您的int矩阵大小,当然),这将是一个相当直接的解决方案。
标签: c arrays input multidimensional-array matrix