0

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

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

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

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

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

+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

我怎样才能做到这一点?

4

4 回答 4

2

像这样使用

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;
}
于 2013-04-29T08:32:55.167 回答
0

You need something like:

char str[1000];
double v = 3.1415926;
sprintf(str, "%+6.2f", v); 

The + indicates "show sign".

A more complete bit of code:

#include <stdio.h>

int main()
{
    double a[] = { 0, 3.1415, 333.7, -312.2, 87.8712121, -1000.0 };
    int i;
    for(i = 0; i < sizeof(a)/sizeof(a[0]); i++)
    {
        printf("%+8.2f\n", a[i]);
    }

    return 0;
}

Output:

   +0.00
   +3.14
 +333.70
 -312.20
  +87.87
-1000.00

Obviously, using sprintf, there would be a buffer involved, but I believe this shows the solution more easily.

于 2013-04-29T08:29:03.687 回答
0
int main()
{
char s[100];
double x=-100.00;

sprintf(s,"%s%f",x<0?"":"+",x);
printf("\n%s",s);
x = 1000.01;
sprintf(s,"%s%f",x<0?"":"+",x);
printf("\n%s",s);
return 0;
}

Here is the code. Its O/p is ::

-100.000000
+1000.010000
于 2013-04-29T08:29:52.000 回答
0

您需要一个单独的缓冲区,您可以在其中 sprintf 您的数字与您的符号,并且您可以将生成的字符串 sprintf 到右对齐的结果缓冲区中。

于 2013-04-29T10:31:29.317 回答