Как мне распечатать каждый символ один за другим? - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь напечатать символы в этом массиве один за другим в таблице с 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 голосов
/ 14 октября 2018

Здесь у вас есть функция.Если строка заканчивается на " .", она принимает данные до '.'.Если нет, он берет данные до количества строк и столбцов или до конца строки, чтобы избежать 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]);
    }
}
...