gpt4 book ai didi

c - 在 C printf 格式化输出方面需要帮助

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:47 29 4
gpt4 key购买 nike

我正在显示一个分区表,该表的显示有点像:

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,因此不清楚您是应该将范围加倍,还是应该使用其他值(甚至相同的值) ;您需要调整格式字符串的那部分以适合您自己。这种技术也是我在名称末尾获得冒号的方法 — 将名称和冒号格式化为一个字符串,然后将该字符串格式化为最终的打印操作。

关于c - 在 C printf 格式化输出方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13152549/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com