首页 > 解决方案 > 如何逐个打印每个字符?

问题描述

我试图在一个有 7 行 4 列的表中一个一个地打印这个数组中的字符。但是,我得到的唯一输出是每一列和每一行中的整个字母表。如何按我想要的顺序一个一个地打印每个字符?
请注意,表格应该以空格和..

输出应如下所示:

a b c d
e f g h
h i j k
l m n o
p q r s
t u v w
y z   .

这是我的代码:

struct pagestruct sequence[ROWS];
char alfabet[] = "abcdefghijklmnopqrstuvwxyz .";

for (int i = 0; i < ROWS; i++) {
  printf("\n");
  for (int k = 0; k < COLUMNS; k++) {
    strcpy(sequence[k].page, alfabet);
    printf("%s", sequence[k].page);
  }
}

编辑:

这是头文件:

#define COLUMNS 4
#define ROWS 7 

struct pagestruct
{
  char page[COLUMNS];
};

标签: carraysfor-loopcharheader-files

解决方案


在这里你有这个功能。如果字符串由 终止,则" ."它会将数据带到'.'. 如果不是,它将数据最多行数和列数或字符串的末尾以避免UB。如果字符串太短,则表格的其余部分将填充空格。当然你可以在这一点上打破,但我不知道这是不是这个想法。

因为你想填补另一张桌子,所以我以同样的方式做到了

#include <stdio.h>
#include <string.h>

#define SIDANTAL    7
#define BYTE 4

int main(void)
{
    char alfabet[] = "abcdefghijklmnopqrstuvwxyz .";
    char sequence[SIDANTAL][BYTE * 2 + 1];
    char *end = strstr(alfabet, " .");
    size_t len = end ? (end - alfabet + 2) : strlen(alfabet), cpos = 0;

    for(size_t i = 0; i < SIDANTAL; i++)
    {
        for(size_t k = 0; k < BYTE; k++)
        {
            sequence[i][k * 2] = cpos < len ? alfabet[cpos] : ' ';
            sequence[i][k * 2 + 1] = ' ';
            cpos++;
        }
        sequence[i][BYTE * 2] = 0;
    }

    for(size_t i = 0; i < SIDANTAL; i++)
    {
        printf("%s\n", sequence[i]);
    }
}

推荐阅读