gpt4 book ai didi

c++ - 使用具有固定宽度、左对齐字段和串联的 sprintf

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:08 24 4
gpt4 key购买 nike

我正在使用 sprintf 制作漂亮的列式输出(通过 printffprintf),但是在组合两个时遇到可变字符串长度的问题字符串。

在大多数情况下,我使用它并且它有效:

sprintf(strtmp, "%i\t%-20s\t% 2.2f\t% 2.2f", measnum,
measurementname, setvalue, measuredvalue);

在每个测量函数中运行时,输出如下:

1    MeasurementNameA            75    77 8
2 MeasNameB 50 52 2

但是,有时我想添加到字符串但保持正确调整。如果没有固定宽度,代码如下所示:

sprintf(strtmp, "%i\t%s_setup%i\t% 2.2f\t% 2.2f", measnum,
measurementname, counter, setvalue, measuredvalue);

1    MeasureNameA    75    77 8  
2 MeasNameB_setup1 50 52 2
3 MeasNameB_setup2 50 51 6

如何在不使用多个步骤的情况下组合这些,这样我的输出是:

1    MeasureNameA                75    77 8
2 MeasNameB_x1 50 52 2
3 MeasNameB_x2 51 53 6

我不能使用 boost。

可能需要额外的信息。
我的伪代码是这样的:

(measurementA)
-Setup measurement A -
-Take measurement A -
-sprintf
-printf, fprintf

(measB)
-Setup measurement B
for(x=1; x<10; x++)
-Set x
-Take measurement B
-sprintf
-printf, fprintf
-end for loop

最佳答案

有一些方法可以做到这一点,您可以使用临时缓冲区生成名称然后打印它们:

char buf[64];
snprintf(buf, 64, "%s_setup%i", measurementname, counter);
sprintf(strtmp, "%i\t%-20s\t% 2.2f\t% 2.2f", measnum, buf, setvalue, measuredvalue);

或者你可以探索可变填充的奇迹:

sprintf(strtmp, "%i\t%s_setup%*i\t% 2.2f\t% 2.2f", measnum,
measurementname, strlen(measurementname) - 14, counter, setvalue, measuredvalue);

关于c++ - 使用具有固定宽度、左对齐字段和串联的 sprintf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657354/

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