将几个字符串输出为由 9 个字符分隔的选取框

Output several strings as a marquee separated by 9 characters

我一直在关注这个 post How to output a string in a marquee fashion? 来输出一个跑马灯。

我的问题是我有一个由多个字符串组成的字符串,由一个字符分隔,在本例中为 '-'。选取框内的字符串到字符串需要 9 个空格的距离。

我试过这段代码,但结果不是预期的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef _WIN32
    #include <windows.h>
#else
    #include <unistd.h>
#endif

void customSleep( int seconds )
{
    #ifdef _WIN32
        Sleep( 1000 * seconds );
    #else
        sleep( seconds );
    #endif
}

static char text[] = "STRING01-STRING02";
static char indexOfCharacterToPrint, i, currentStartPosition;
static char temp;
static char blanks;
static char imarquee;

int main() {
    while (1) {
        if (blanks == 0)
            indexOfCharacterToPrint = (currentStartPosition + imarquee) % strlen(text);
        temp = text[indexOfCharacterToPrint];
        if (temp == '-') {
            blanks++;
            temp = ' ';
            if (blanks == 9)
                blanks = 0;
        }
        printf("%c", temp);
        i++;
        imarquee++;
        if (imarquee == 16)
            imarquee = 0;
        if (i == 16) {
            i = 0;
            currentStartPosition++;
            customSleep(1);
            printf("\r");
        }
    }
}

预期输出为:

STRING01
TRING01         S
RING01         ST
ING01         STR
NG01         STRI
G01         STRIN
01         STRING
1         STRING0
         STRING02

实际输出为

STRING01        
 TRING02TRING01 
        TRING02S
ING01         ST
ING02STRNG01    
     TRING02STRI
01         STRIN
02STRING1       
  TRING02STRING0
STRING02STRING01
TRING02STRING01 
        RING02ST
ING01         ST

我错过了什么?

你有东西可以玩。它使用相同大小的字符串。尝试修改它以使用任何大小的字符串(+边界大小写)

#define MAX(a,b) ((a) > (b) ? (a) : (b))

void foo(char *words[], size_t distance)
{
    size_t s1len = strlen(words[0]);
    size_t s2len = strlen(words[1]);

    for(size_t index = 0; index < MAX(s1len, s2len) + 1; index++)
    {
        for(size_t letter = index; letter < s1len; letter++)
        {
            if(letter < s1len) printf("%c", words[0][letter]);
            else printf(" ");
        }
        for(size_t space = 0; space < distance; space++)
            printf(" ");
        for(size_t letter = 0; letter < s2len - (s1len - index); letter++)
        {
            if(letter < s1len) printf("%c", words[1][letter]);
            else printf(" ");
        }
        printf("\n");

    }
    
}

int main(void)
{
    foo((char *[]){"123456789", "ABCDEFGHI"}, 5);
}

https://godbolt.org/z/s8ezaWYzY