簡體   English   中英

帶填充的C文本對齊

[英]C text alignment with padding

我有一個簡單的功能來打印文本。

while (recvbuf[i] != '\0') {
    if (i == 0) {
        printf("%+40c", recvbuf[i]);
    }
    else {
        printf("%c", recvbuf[i]);
    }
    i++;
};

它打印文本,第一個單詞(行)以填充40開頭。但是我想做的每一行都以填充40開頭。 不知道該怎么做。

謝謝你的幫助。

我需要在控制台中輸出什么。

             fksdpo gfdg fd gdf gdf gdf gfd gdf gd
             fksdpo gfdg fd gdf gdf gdf gfd gdf gd
             fksdpo gfdg fd gdf gdf gdf gfd gdf gd
             fksdpo gfdg fd gdf gdf gdf gfd gdf gd
             fksdpo gfdg fd gdf gdf gdf gfd gdf gd
             fksdpo gfdg fd gdf gdf gdf gfd gdf gd
             fksdpo gfdg fd gdf gdf gdf gfd gdf gd

我現在有什么。

             fksdpo gfdg fd gdf gdf gdf gfd gdf gd
fksdpo gfdg fd gdf gdf gdf gfd gdf gd
fksdpo gfdg fd gdf gdf gdf gfd gdf gd
fksdpo gfdg fd gdf gdf gdf gfd gdf gd
fksdpo gfdg fd gdf gdf gdf gfd gdf gd
fksdpo gfdg fd gdf gdf gdf gfd gdf gd

我不確定是否要填充它(對我來說,填充是緊隨其后的,所以我將不使用此術語)。 您想在控制台行的開頭添加一些空間格式。

因此,您必須定義:控制台寬度,所需的起始空格。

然后,對於要打印的每個單詞,必須計算控制台寬度是否可以達到。 如果是這樣,則必須開始新的一行。

如果需要換行,則必須以空格開頭。

#include <ctype.h>
#include <stdio.h>

int word_length(const char *word)
{
    int size = 0;
    for (; *word && !isspace(*word); ++word)   
{     
        ++size;
    }
    return size;
}

void print_word(const char *word, int size)
{
    while(size--)
        putchar(*word++);

    putchar(' ');

}

void format(int width, int spaces, const char *text)
{
    int sol = spaces;
    int current_pos = 0;

    while (*text)
    {   
        /* size of the current word */
        int word_len;

    /* if needed, print spaces */
        for (; sol != 0; --sol)
        {
            putchar(' ');
            ++current_pos;
        }

        /* get size of next word */
        word_len = word_length(text);

        if (word_len > width)
        {
            printf("error, word too long...\n");
            return;
        }


    /* see if writting current word will go over width*/
        if (current_pos + word_len > width)
        {
            sol = spaces;
            current_pos = 0;
            putchar('\n');
            continue;
        }

        /* print the current word */
        print_word(text, word_len);

        /* update the cursor position */
        current_pos += word_len + 1;

        /* position text pointer position on next word */
        text += word_len;            
        while(*text && isspace(*text))
        {
            ++text;
        }                        
    }
}

int main(void)
{
    char text[] = "fksdpo gfdg fd gdf gdf gdf gfd gdf gd fksdpo gfdg fd gdf gdf gdf gfd gdf gd fksdpo gfdg fd gdf gdf gdf gfd gdf gd fksdpo gfdg fd gdf gdf gdf gfd gdf gd fksdpo gfdg fd gdf gdf gdf gfd gdf gd fksdpo gfdg fd gdf gdf gdf gfd gdf gd";
    format(45, 5, text);
    return 0;
}

會給:

     fksdpo gfdg fd gdf gdf gdf gfd gdf gd 
     fksdpo gfdg fd gdf gdf gdf gfd gdf gd 
     fksdpo gfdg fd gdf gdf gdf gfd gdf gd 
     fksdpo gfdg fd gdf gdf gdf gfd gdf gd 
     fksdpo gfdg fd gdf gdf gdf gfd gdf gd 
     fksdpo gfdg fd gdf gdf gdf gfd gdf gd 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM