Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何非线性打印数组内容(例如,在4x4单元格中)_C_Arrays - Fatal编程技术网

C 如何非线性打印数组内容(例如,在4x4单元格中)

C 如何非线性打印数组内容(例如,在4x4单元格中),c,arrays,C,Arrays,我正在尝试以非线性方式打印数组的内容(不顺序)。我的代码当前从文本输入读取数据,将文本输入数据存储到2D数组中,然后依次在4x4单元格中遍历2D数组,并将结果打印到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

我正在尝试以非线性方式打印数组的内容(顺序)。我的代码当前从文本输入读取数据,将文本输入数据存储到2D数组中,然后依次在4x4单元格中遍历2D数组,并将结果打印到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; 
}
#包括
int main()
{
int h=4;//数据集的高度
int w=12;//数据集的宽度
int矩阵[4][12];//存储数据的2d矩阵
int i,j;//循环变量
文件*f;
f=fopen(“test_file.txt”,“r”);//输入文件
如果(f==NULL)
{
fprintf(stderr,“错误:无法打开文件输入”,f);
出口(1);
}
//迭代输入文件流
对于(i=0;i
编辑:不幸的是,我忘了提到一个关键规范;我还希望能够将电池尺寸从4x4更改为其他尺寸,例如12x12。

您可以按以下操作

//Iterate through the 2d array in 4x4 cells
for (int i = 0; i < h; i++)
{
        for (int j = 0; j < w ; j+=4)
        {
                for (int jj = 0; jj < h ; jj++)
                {
                        printf("%.2d ", matrix[i][j+jj]);
                }
                printf("    ");
        }
        printf("\n");
}

如果您真的只想打印它,下面的代码可以做到这一点:

#include <stdio.h>

#define BLOCK 4
#define COLS 12

int main(int argc, char* argv[]) 
{
    for(int i = 1; i <= 48; ++i) /* replace this loop with a loop over the actual data to print */
    {
        /* print mtx with columns and blocks
         * insert a leading 0 with format %02i 
         * insert tab e.g. e.g. i == 4,8,12 etc.. for BLOCK=4, or a whitespace otherwise 
         * insert new line e.g. when i == 12, 24, etc... for COLS=12 */
        printf("%02i%s%s", i, (i%BLOCK==0) ? "\t" : " ", (i%COLS==0) ? "\n" : "");
    }

    return 0;
}
#包括
#定义块4
#定义COLS 12
int main(int argc,char*argv[])
{
对于(int i=1;i可能的解决方案(仅打印循环):

(i=0;i{ 对于(j=0;j
#include
不是C代码。不需要混淆前导0;
%02i
告诉
printf
如果需要,将至少两个字符的字段格式化为前导零。应该对代码进行注释或以其他方式记录和解释尽管这是基本代码,但提出问题的人通常是新手o概念和可从解释中获益。代码应注释或以其他方式记录和解释。虽然这是基本代码,但提出问题的人通常对概念不熟悉,并可从解释中获益。滥发@EricPostpischil?代码应注释或以其他方式记录和解释,尽管这是基本代码,一个人问问题通常是新的概念,可以从解释中受益?
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>

#define BLOCK 4
#define COLS 12

int main(int argc, char* argv[]) 
{
    for(int i = 1; i <= 48; ++i) /* replace this loop with a loop over the actual data to print */
    {
        /* print mtx with columns and blocks
         * insert a leading 0 with format %02i 
         * insert tab e.g. e.g. i == 4,8,12 etc.. for BLOCK=4, or a whitespace otherwise 
         * insert new line e.g. when i == 12, 24, etc... for COLS=12 */
        printf("%02i%s%s", i, (i%BLOCK==0) ? "\t" : " ", (i%COLS==0) ? "\n" : "");
    }

    return 0;
}
     for (i = 0; i < h; i++) {
        for (j = 0; j < w; j++) {
            printf("%.2d ", matrix[i][j]);

            if((j + 1) % 4 == 0) printf("   ");
        }
        printf("\n");
    }