[英]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.