Как отформатировать вывод для печати как Linux Command ls - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь напечатать имена файлов и папок в текущем каталоге в столбцах одинаковой ширины, аналогично системной команде ls. Количество столбцов зависит от ширины окна терминала.

Я знаю, как получить размеры терминала, и у меня уже есть имена файлов / папок, отсортированные в массиве. Я не уверен, как напечатать их в столбцах одинаковой ширины, как в примере ниже.

dirA       file2.txt  file5.txt  file8.txt
file0.txt  file3.txt  file6.txt  file9.txt
file1.txt  file4.txt  file7.txt

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Формат "% s" (функции printf ()) имеет "квалификаторы". Вы можете настроить строку внутри фиксированного пространства:

printf("'%15s'", "abc");
Print: '            abc'

printf("'%-15s'", "abc");
Print: 'abc            '

Используя цикл (например, для (;;)), вы можете печатать все элементы.

0 голосов
/ 01 апреля 2019

Я получил выравнивание столбцов, связавшись со спецификатором ширины печати.Но если вы посмотрите на мой пример, мне нужно печатать в таком порядке.Я не уверен, как настроить мой цикл или петли, чтобы сделать это.

/*example output

directoryA  file2  file5
directoryB  file3  file6
file1       file4  file7

*/


char  *str[] =  {"directoryA", "directoryB", "file1", "file2", file3", "file4", "file5", "file6", "file7" };

int num_files = 9;

int spaceleft = win_width;
int padding = 0;


for(int i = 0; i < num_files; i++)
{

    int space = 1;
    int padding = largest_str - strlen(str[i]);
    int next_string = strlen(str[i]) + space + padding;

    spaceleft = spaceleft - next_string;

    if(spaceleft > next_string)
    {

        printf("%-*s ",largest_str ,str[i]);
    }
    else
    {
        spaceleft = x;
        printf("\n%-*s ",largest_str, str[i]);
        spaceleft = spaceleft - next_string;
    }

}
printf("\n");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...