我正在尝试在终端的左半部分打印一个字符串,在终端的右半部分打印另一个字符串。我必须使用ANSI转义序列而不是ncurses来实现。我还想确保在该行的末尾不拆分任何单词。如果该行没有足够的空间来打印单词,那么我想在下一行上打印单词。
我尝试用printf(\ n)替换move调用,然后使用move到达屏幕的所需一半。似乎完全忽略了move调用。
#define clear() printf("\033[H\033[J")
void move(int y, int x)
{
printf("\033[%d;%dH", y, x);
}
void print_left_right(int cols, char * left, char * right)
{
clear();
int cols_end = cols / 2;
int line = 0;
int current_pos = 0;
char * l_split = strtok(left, " ");
move(0, 0);
while (l_split != NULL)
{
current_pos += (strlen(l_split) + 1); // plus one for space
if (current_pos >= cols_end)
{
line += 1; // <----- doesn't seem to work
move(line, 0); // <----- seems to work
current_pos = 0;
}
printf("%s ", l_split);
l_split = strtok(NULL, " ");
}
line = 0;
current_pos = cols_end;
char * r_split = strtok(right, " ");
move(0, cols_end);
while (r_split != NULL)
{
current_pos += (strlen(r_split) + 1);
if (current_pos >= cols)
{
++line;
move(line, cols_end);
current_pos = cols_end;
}
printf("%s ", r_split);
r_split = strtok(NULL, " ");
}
}
我使用strtok将给定的字符串拆分为单词,然后尝试打印它。如果单词不合适,我希望line变量增加并移到另一行。 但是,line变量不会增加,并且此代码始终重写同一行。奇怪的是,此举似乎正确地移至了终端的正确一半。 我想我正在做一些令人难以置信的愚蠢...