C 文本对齐与填充

标签 c padding

我有一个简单的函数来打印文本。

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

它打印文本,第一个单词(行)以 padding 40 开头。但我想要做的是不仅首先以 padding 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 

关于C 文本对齐与填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690574/

相关文章:

java - GWT Horizo​​ntalPanel setSpacing?

html - 为什么一个单元格中元素的填充会影响另一个单元格?

css - div 缺少填充

c - execl 中 C 程序的负参数被检测为选项

c - 位集 vector int k 在 C 中超出范围

c - 如何检查变量是否已赋值

c - 员工结构

.net - XAML 中的单个字符填充

Android:在叠加图像背景中设置填充

c - Queue中的node_add,只插入前3个作为前中后