我正在尝试以与系统命令ls类似的相等宽度的列来打印当前目录中的文件和文件夹的名称。列数基于终端窗口的宽度。
我知道如何获取终端尺寸,并且我已经将文件/文件夹名称排序在一个数组中。我不确定如何像下面的示例一样在等宽列中打印它们。
dirA file2.txt file5.txt file8.txt
file0.txt file3.txt file6.txt file9.txt
file1.txt file4.txt file7.txt
答案 0 :(得分:1)
(printf()函数的格式)“%s”具有“限定符”。您可以在固定空间内调整字符串:
printf("'%15s'", "abc");
Print: ' abc'
printf("'%-15s'", "abc");
Print: 'abc '
使用循环(如for(;;)),您可以打印所有元素。
答案 1 :(得分:0)
通过弄乱printf宽度说明符,我可以将列对齐。但是,如果您查看我的示例,则需要按此顺序打印。我不确定如何设置一个或多个循环来执行此操作。
/*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");