arrays - 如何添加从 c 中的文件编号读取的二维数组组?
问题描述
我需要读取一个包含数字的文件,并从这些数字中创建 4 行和 5 列矩阵。然后,我需要添加这些矩阵并打印总和矩阵(矩阵的数量取决于用户输入)。
#include <stdio.h>
#include <stdlib.h>
void main(int argc, char *argv[]) {
int a = 4;
int b = 5;
int m;
scanf("%d", &m);
FILE *file = fopen("matrix.txt", "r");
int arr[a][b][m], i, j, k;
for (i = 0; i < a; i++) {
for (j = 0; j < b; j++) {
for (m = 0; k < m; k++) {
fscanf(file, "%d", &arr[i][j][k]);
arr[i][j] += arr[i][j];
}
}
}
for (i = 0; i < a;i++) {
for (j = 0; j < b; j++) {
for (k = 0; k < m; k++) {
printf("%d", arr[i][j][k]);
printf("\t");
}
printf("\n");
}
}
}
解决方案
您不需要将矩阵数据加载到单独的矩阵中,您可以在从文件中读取每个矩阵时即时添加矩阵内容:
#include <errno.h>
#include <stdio.h>
#include <string.h>
void main(int argc, char *argv[]) {
int m;
if (scanf("%d", &m) != 1)
return 1;
const char *filename = "matrix.txt";
FILE *file = fopen(filename, "r");
if (file == NULL) {
fprintf(stderr, "cannot open %s: %s\n", filename, strerror(errno));
return 1;
]
int a = 4;
int b = 5;
int sum[a][b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
sum[i][j] = 0;
}
}
for (int k = 0; k < m; k++) {
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
int value;
if (fscanf(file, "%d", &value) != 1) {
fprintf(stderr, "not enough data\n");
return 1;
}
sum[i][j] += value;
}
}
}
fclose(file);
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
printf("%d\t", sum[i][j]);
}
printf("\n");
}
return 0;
}
如果您需要将所有数据加载到内存中,请使用矩阵数组:int arr[m][a][b];
和 2 个单独的循环来读取和求和数据:
#include <errno.h>
#include <stdio.h>
#include <string.h>
void main(int argc, char *argv[]) {
int m;
if (scanf("%d", &m) != 1)
return 1;
const char *filename = "matrix.txt";
FILE *file = fopen(filename, "r");
if (file == NULL) {
fprintf(stderr, "cannot open %s: %s\n", filename, strerror(errno));
return 1;
]
int a = 4;
int b = 5;
int arr[m][a][b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
sum[i][j] = 0;
}
}
for (int k = 0; k < m; k++) {
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
if (fscanf(file, "%d", &arr[k][i][j]) != 1) {
fprintf(stderr, "not enough data\n");
return 1;
}
}
}
}
fclose(file);
int sum[a][b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
int s = 0;
for (int k = 0; k < m; k++) {
s += arr[k][i][j];
}
sum[i][j] = s;
}
}
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
printf("%d\t", sum[i][j]);
}
printf("\n");
}
return 0;
}
推荐阅读
- webpack - Webpack mini-css-extract-plugin 未加载主 css 包
- c# - 延迟 ViewModel 属性初始化
- html - 光标与按钮的 CSS 交互
- php - PHP:替换网址的第一部分
- angular - TypeScript 中默认的通用约束
- swift - UIBarButtonItem 选择器不起作用
- json - Golang http 请求 POST 工作一次
- visual-studio-code - Unhelpful output from pytest
- python - 更改 ipywidgets.DatePicker 的日期格式
- r - 每个因子水平内所有列的所有可能行对之间的差异