我在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
我该怎么做?
答案 0 :(得分:2)
像这样使用
sprintf(outputstr, "%+7.2f", double_number);
E.g。
#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;
}
答案 1 :(得分:0)
您需要以下内容:
char str[1000];
double v = 3.1415926;
sprintf(str, "%+6.2f", v);
+表示“显示标志”。
更完整的代码:
#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;
}
输出:
+0.00
+3.14
+333.70
-312.20
+87.87
-1000.00
显然,使用sprintf会涉及缓冲区,但我相信这更容易显示解决方案。
答案 2 :(得分: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;
}
这是代码。 它的O / p是::
-100.000000
+1000.010000
答案 3 :(得分:0)
你需要一个单独的缓冲区,你可以在其中使用你的符号冲刺你的号码,并且你可以将所得到的字符串sprintf到正确的结果缓冲区。