c - 在 c 中使用 sprintf 格式化字符串

标签 c printf

我正在使用 sprintf 在 C 中形成字符串。

我需要在浮点值前插入“+”和“-”符号。

这个正号和负号是通过在我插入浮点值之后检查一个标志来插入的。

现在我想让这个整数与正号或负号一起右对齐。

目前这是我的格式化字符串:

+300.00
-200.00
+34.60

我想要如下输出,

+300.00
+233.45
 -20.34

我写了下面的代码:

char printbuff[1000], flag = 1;
double temp=23.34, temp1= 340.45;   

sprintf(printBuff, "%c%-lf\n%c%-lf",
        (Flag == 1) ? '+' : '-',
        temp,
        (Flag == 1) ? '+'  :'-',
        temp1);

我得到以下输出:

+23.34
+340.45

而不是想要的:

 +23.45
+340.45

我该怎么做?

最佳答案

这样使用

sprintf(outputstr, "%+7.2f", double_number);

例如

#include <stdio.h>
#include <string.h>
#include <math.h>

void output_string(char output_buffer[], double nums[], size_t size){
/*  use '+' flag version
    int i,len=0;
    for(i=0;i<size;++i)
        len += sprintf(output_buffer + len, "%+7.2f\n", nums[i]);
*/  //handmade version
    int i, len=0;
    for(i=0;i<size;++i){
        char sign = nums[i] < 0 ? '-' : '+';
        char *signp;
        double temp = abs(nums[i]);

        len += sprintf(signp = output_buffer + len, "%7.2f\n", temp);
        signp[strcspn(signp, "0123456789")-1] = sign;//The width including the sign is secured
    }
}

int main(){
    double nums[] = {
        +300.00,
        -200.00,
         +34.60,
        +300.00,
        +233.45,
         -20.34
    };
    char output_buffer[1024];
    int size = sizeof(nums)/sizeof(*nums);

    output_string(output_buffer, nums, size);
    printf("%s", output_buffer);

    return 0;
}

关于c - 在 c 中使用 sprintf 格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16274115/

相关文章:

c - 从 GDB 的 python 交互模式中读取/写入变量/符号

从 Lua 调用 C 函数

c - 如何让数组知道是否有非数字输入或到达输入末尾?

c - 指向范围外变量的指针在 C 中如何表现?

无法将字符串写入 .txt 文件

条件变量程序适用于 2 个线程,但不适用于 3 个线程

r - 如何使用 R 的 sprintf 创建固定宽度的字符串,并在 END 处填充空白?

c - Printf 可变浮点型小数位数

bash - 使用 printf 时行未正确对齐

c - 我正在比较什么类型的数据?