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