簡體   English   中英

如何在printf中填充兩個字符串?

[英]How to padding two strings in printf?

例如:

printf("%-10s%s\n", s1, s2);

我可以得到:

s1         s2

當較早的字符串可能具有不同的長度時,我想在固定列中使用 s3

printf("%s%s%s\n", s1, s2, s3); // how to padding 10?

s1s2         s3
s11s22       s3
s111s222     s3

您將不得不使用一些邏輯來計算要打印多少個空格,例如:

int s3_column = 15;   // example position
int length = printf("[%s%s]", s1, s2);
if ( length >= 0 && length < s3_column )
    printf("%*s", (int)(s3_column - length), "");
printf("%s\n", s3);

正如評論中所建議的,另一種可能的方法是在其自己的緩沖區中准備[s1s2]部分,但這需要額外的內存並會導致與內存分配相關的所有潛在問題,並且最終將成為比計算空間更復雜的代碼就像我的例子一樣。

void print_with_indent(int indent, char * string) { printf("%*s%s", indent, "", string); }

每個%s包含一個 nm 修飾符 (%n.ms) 以將每個字符串放置在已知的起點(並避免溢出到下一個字符串所需的位置)然后確保 'm 的總和將第三個字符串准確放置在您的位置想要它開始。

- 或者 -

在第二個“輸出格式轉換”說明符之后使用 ANSI 轉義序列將光標置於第三個字符串的開始位置

- 或者 -

運行 ncurses 窗口並使用movexy()將光標放置在您希望第三個字符串開始的位置

- 或者 -

如果使用 Borland 的conio.h庫,則使用:

gotoxy()`

- 或者 -

在窗戶里

#include <windows.h>

void SetPosition(int X, int Y)
{
    HANDLE Screen;
    Screen = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD Position={X, Y};

    SetConsoleCursorPosition(Screen, Position);
}

暫無
暫無

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

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