#include <stdio.h>
#include <stdlib.h>
int main() {
int row = 0, colu = 3, j, i;
FILE *fp;
fp = fopen("file.txt", "r");
fscanf(fp, "%d", &row);
int *arr = (int *)malloc(row * colu * sizeof(int));
for (i = 0; i < row; i ) {
for (j = 0; j < col; j ) {
*(arr i * col j) = i j;
printf("%d ", *(arr i * col j));
}
printf("\n");
}
}
所以我能夠使用 2D 陣列,malloc但現在我想從檔案中獲取資訊并將其存盤到我的 2D 陣列中。
檔案:
4
34.1 54.2 54
23.4 19.5 53.2
43.2 54.2 54.2
53.2 62.4 27.5
等等......
第一行是我將使用的行數。我已經想出了如何做到這一點。但現在我想將“4”以下的數字存盤到二維陣列中。我怎么能這樣做。對不起,如果我沒有很好地解釋這一點,我是編碼新手。
uj5u.com熱心網友回復:
...將“4”以下的數字存盤到二維陣列中。
添加 afscanf()以存盤到由 指向的一維陣列中arr。
也考慮添加錯誤檢查。
if (fscanf(fp, "%d ", arr i * col j) != 1) {
fprintf(stderr, "Failed to read.\n");
exit(-1);
}
printf("%d ", *(arr i * col j));
我能夠使用 malloc 創建一個二維陣列
代碼沒有分配二維陣列。只是一個一維陣列。
二維陣列需要更多的作業。
uj5u.com熱心網友回復:
函式fscanf獲取它寫入掃描資料的物件的地址。它回傳許多成功掃描的元素,這將是1您的情況。這就是為什么scanf-like 函式的典型用法如下。
int data;
if (scanf("%d", &data) != 1)
... error handling ...
... use data ...
實際上,您不會在代碼中使用二維陣列,而是使用一維陣列來模擬它。要創建真正的動態二維陣列,您應該使用指向可變長度陣列 (VLA) 的指標。您可以在下面找到增強了錯誤處理的更新版本,強烈建議在處理檔案時使用該版本。
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 0, cols = 3, j, i;
FILE *fp;
fp = fopen("file.txt", "r");
if (!fp) {
fprintf(stderr, "failed to open file.txt");
exit(-1);
}
if (fscanf(fp, "%d", &rows) != 1) {
fprintf(stderr, "failed to read number of rows");
exit(-1);
}
// allocate memory for `row` elements of type `*arr` which is `int[cols]`
int (*arr)[cols] = calloc(rows, sizeof *arr);
if (!arr) {
fprintf(stderr, "out of memory");
exit(-1);
}
for (i = 0; i < rows; i ) {
for (j = 0; j < cols; j ) {
if (fscanf(fp, "%d", &arr[i][j]) != 1) {
fprintf(stderr, "failed to parse entry at [%d,%d]", i, j);
exit(-1);
}
}}
for (i = 0; i < rows; i ) {
for (j = 0; j < cols; j )
printf("%d ", arr[i][j]);
puts(""); // newline
}
free(arr);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/356261.html
