在打印数字时,我正在尝试在数字之前打印其符号。有没有一种方法可以在没有下面的代码的注释部分中提到的if ... else实际情况的情况下进行操作。
我尝试获取数字的符号。但是我不知道如何只打印标志。
#include<stdio.h>
#include<complex.h>
void main(){
double complex s = 3.14 + 5.14*I;
printf("\ns is: %f + %f i", creal(s), cimag(s));
double complex S = conj(s);
printf("\nConjugate of s is: %f + %f i", creal(S), cimag(S));
}
/*
printf("\nConjugate of s is: %f ", creal(S))
if cimag(S) > 0
printf("+ %f i", cimag(S))
else
printf("- %f i", abs(cimag(S)))
*/
如果S = 3.14-5.14 * I,如果没有if ... else条件,我期望得到类似以下的输出:
3.14 - 5.14 i
答案 0 :(得分:4)
您可以只使用printf符号标志。 +
#include <stdio.h>
int main()
{
float f = 1.0;
printf("%f%+f",f,f);
return 0;
}
输出
1.000000 + 1.000000
更改为-1:
-1.000000-1.000000
如果您确实需要空格,那么您将必须执行您描述的操作:
#include <stdio.h>
#include <math.h>
#include <complex.h>
void complexToString(double complex num, char * buffer){
double imag = cimag(num);
char sign = (imag<0) ? '-':'+';
sprintf(buffer,"%f %c %f i",creal(num),sign,fabs(imag));
}
int main()
{
double complex s = 3.14 + 5.14*I;
char buffer[50];
complexToString(s,buffer);
printf("%s",buffer);
return 0;
}
输出:
3.140000 + 5.142000 i
答案 1 :(得分:2)
首先获得符号字符:
double x = ...;
char c = signbit(x) ? '-' : '+';
然后根据需要使用它:
printf ("%c %f", c, fabs(x));
答案 2 :(得分:1)
借助@Antoine和@yhyrcanus的答案,最简单的空间编码方法是:
double complex s = 3.14 - 5.14*I;
printf("\ns is: %f %c %f i", creal(s), signbit(cimag(s)) ? '-' : '+',cabs(cimag(s)));