所以我想要做的是我有两个文件,它们的 64x64 数组由空格和换行符分隔。我想要做的是读取文件并将其放置在包含两个 64x64 数组的结构中。这些文件看起来像这样:
2 5 1 6 2 ... 6
3 2 9 5 1 ... 8
.
.
2 4 1 5 2 ... 5
这就是我想做的事情
int
getFromFile(char *fileNameMatrixA, char *filenameMatrixB, struct Matrises *matrix)
{
FILE *fileA, *fileB;
char buffer[BUFFER_LEN];
int counter = 0;
if((fileA = fopen(fileNameMatrixA, "r")) == NULL)
{
return 1;
}
if((fileB = fopen(fileNameMatrixB, "r")) == NULL)
{
fclose(fileA);
return 2;
}
while(fgets(buffer, sizeof(buffer), fileA) != NULL)
{
if(sscanf(buffer, "%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d", matrix->matrixA[counter][0], matrix->matrixA[counter][1], matrix->matrixA[counter][2], matrix->matrixA[counter][3], ... , matrix->matrixA[counter][63]) != 64)
{
fclose(fileA);
fclose(fileB);
return 3;
}
counter++;
}
counter = 0;
while(fgets(buffer, sizeof(buffer), fileB) != NULL)
{
if(sscanf(buffer, "%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d\s%d", matrix->matrixB[counter][0], matrix->matrixB[counter][1], matrix->matrixB[counter][2], matrix->matrixB[counter][3], ... , matrix->matrixB[counter][63]) != 64)
{
fclose(fileA);
fclose(fileB);
return 4;
}
counter++;
}
fclose(fileA);
fclose(fileB);
return 0;
}
我想你们所有人都看到了问题.. 这绝不是一个好的方法。但是我不知道还有什么其他的方法可以不那么口头表达。
有没有一种方法可以更高效、更干净地执行此操作?
最佳答案
您可以使用循环和%n
在每个循环中扫描一个数字。 %n
的目的是获取扫描使用的字符数。通过这种方式,您可以按数字迭代字符串编号。
这是一个例子:
int main(int argc, char *argv[])
{
char buf[20] = "1 2 3 4"; // Assume this is the data read using fgets
int x;
int offset = 0;
int temp;
while (sscanf(buf + offset, "%d%n", &x, &temp) == 1)
{
printf("At offset %d scanned %d\n", offset, x);
offset += temp;
}
}
输出:
At offset 0 scanned 1
At offset 1 scanned 2
At offset 3 scanned 3
At offset 5 scanned 4
添加一个在每个循环中递增的简单计数器将允许您将数字存储在数组中。
关于c - 读取一个大文件并将数据放在正确的数组中而不要太口头表达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420186/