如何逐个打印每个字符?

时间:2018-10-14 12:03:23

标签: c arrays for-loop char header-files

我试图在具有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];
};

1 个答案:

答案 0 :(得分:1)

这里具有功能。如果字符串以" ."终止,它将把数据最多存储到'.'。如果不是,它将数据最多行和列的数目或字符串的末尾,以避免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]);
    }
}