抵消列所需的数学运算?

时间:2019-03-30 19:52:09

标签: c linux

我有一个项目,我需要按照字典顺序打印目录的内容,其中的列数取决于终端窗口的当前宽度,而列的数量可变,并且内容的打印垂直方向都是等长的。

我完成了大部分基本构想,基本上我只是将终端窗口宽度除以我为允许的列长度设置的任意数字(在这种情况下为22,因此每行打印的文件名数量始终为window_width / 22 ,例如,如果window_width为88,88 / 22为4,因此每一行最多包含4个文件名,则空格数量是文件名长度与22之间的差。

我发现所有词典词典的内容和目录中的打印文件都已完成,现在我只是在努力弄清楚我需要用什么数学来垂直打印所有内容。我试图写下一些想法,但我仍然受阻,不知道如何开始。我试图吐出一些代码想法,但是所有这些想法最终都出现了分段错误(毫无疑问,由于试图找出一种补偿数组的方法,这将在下文中解释),或者只是以意外方式打印文件方式。

例如,如果我的目录包含

f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13 

然后它应该打印出如下内容:

f1  f5  f8  f11
f2  f6  f9  f12
f3  f7  f10 f13
f4

我知道一旦打印出一行,就无法返回它,因此我必须想出一种方法来一次打印f1 f5 f8 f8 f11,并且一直向下打印。

所有文件名都存储在一个数组中,所以我想以某种方式进行偏移,例如rowWidth(在这种情况下为4),i = 0,arr [i + rowWidth * 0]为f1,arr [i + rowWidth * 1]是f5,但是arr [i + rowWidth * 2]应该是f8,这意味着在第一列中,第一和第二个元素之间的距离是4(这是由于col的高度所致) 1),但每隔一列,距离仅为3(因为1之后的所有cols均为高度3)。

我认为这与列长度和窗口宽度的除法有关,但是我真的不知道如何在打印输出之前确定所有列的长度以及如何正确分配数组偏移量。

我不太确定如何处理此问题,感觉这种情况需要很多先见之明,所以在我对应该使用哪种方法有了明确的想法之前,我不想再次介入。

0 个答案:

没有答案