簡體   English   中英

在C printf格式化輸出中需要幫助

[英]Need help in C printf formatted output

我正在顯示一個分區表,該表顯示如下:

Number     Device name       Partition type      Size in MB
------------------------------------------------------------
1           /dev/sda1         NTFS                    300
2           /dev/sda2         *Win95 FAT32             99
3           /dev/sda3         Unknown                 128
4           /dev/sda4         NTFS                  19472
120         /dev/sda120       NTFS                   3000

*=Active partition

現在,用於顯示以上內容,我們使用格式化的輸出printf,格式字符串為

"%-6d=partition number    %-25.25s=device name  %c=active partition    %-30.30s=part type          %7Ld=size"

現在,我想顯示相同的分區表,但是要進行一些稍微的修改,以使分區槽中的間隙可以按一定范圍顯示,例如:

5-119     /dev/sda5.../dev/sda119    Empty          0

我將格式化的字符串用作:

%d-%-6d=partition range   %s%d...%s%d=(/dev/sda5.../dev/sda119)   %c  %-30.30s  %7Ld

但這對我沒有幫助。

正確的格式字符串應該是什么? 我正在使用gcc編譯器。

我認為您需要使用snprintf()准備兩個復合字符串,然后使用更簡單的printf()進行實際打印。 由於您尚未顯示實際代碼,因此我們必須對所有內容進行猜測,這很麻煩。

int   min = 5;
int   max = 119;
char *dev = "/dev/sda";

char  num_range[32];
char  dev_range[60];

snprintf(num_range, sizeof(num_range), "%d-%d", min, max);
snprintf(dev_range, sizeof(dev_range), "%s%d...%s%d", dev, min, dev, max);

printf("%-10s   %-50.50s   %c%-30.30s  %7d", num_range, dev_range, ' ', "Empty", 0);

您為單個設備指定了%-25.25s ,因此尚不清楚是否應將該范圍的值翻倍,還是應使用其他值(甚至是相同的值); 您需要調整格式字符串的該部分以適合自己。 這種技術也是我在名稱末尾得到一個冒號的方法-將名稱和冒號格式化為字符串,然后將該字符串格式化為最終的打印操作。

暫無
暫無

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

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