Я пытаюсь распечатать содержимое массива нелинейным способом ( не последовательно). Мой код в настоящее время считывает данные из текстового ввода, сохраняет данные текстового ввода в 2D-массив, а затем последовательно перебирает 2D-массив в ячейках 4x4 и печатает результат в cmd.
Входной файл - test_file.txt:
01 02 03 04 05 06 07 08 09 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45 46 47 48
Текущий нежелательный выход:
001 002 003 004 013 014 015 016 025 026 027 028 037 038 039 040
005 006 007 008 017 018 019 020 029 030 031 032 041 042 043 044
009 010 011 012 021 022 023 024 033 034 035 036 045 046 047 048
Результат, который я пытаюсь достичь:
01 02 03 04 05 06 07 08 09 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36
37 38 39 40 41 42 43 44 45 46 47 48
Моя попытка кода:
#include <stdio.h>
int main()
{
int h = 4; //Height of dataset
int w = 12; //Width of dataset
int matrix[4][12]; //The 2d matrix where the data is stored
int i, j; //Loop variables
FILE *f;
f = fopen("test_file.txt", "r"); //Input file
if (f == NULL)
{
fprintf(stderr, "Error: cannot open file input", f);
exit(1);
}
//Iterate through the input file stream
for (i = 0; i < h; i++) {
for (j = 0; j < w; j++) {
fscanf(f, "%d", &matrix[i][j]);
}
}
//Iterate through the 2d array in 4x4 cells
for (int ii = 0; ii < h && ii < h; ii += 4)
{
for (int jj = 0; jj < w && jj < w; jj += 4)
{
for (int i = ii; i < ii + 4 && i < h; i++)
{
for (int j = jj; j < jj + 4 && j < w; j++)
{
printf("%.3d ", matrix[i][j]);
}
}
printf("\n");
}
}
fclose(f);
getchar();
return 0;
}
РЕДАКТИРОВАТЬ: Я, к сожалению, забыл упомянуть ключевые спецификации; Я также хотел бы иметь возможность изменять размер ячейки от 4х4 до других размеров, например, 12х12.