Как напечатать знак числа в C? - PullRequest
1 голос
/ 22 июня 2019

Во время печати номера я пытаюсь напечатать его знак перед номером.Есть ли способ сделать это без фактического случая 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

Ответы [ 3 ]

4 голосов
/ 22 июня 2019

Вы можете просто использовать флаг печати 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

2 голосов
/ 22 июня 2019

Сначала получите знак:

double x = ...;
char c = signbit(x) ? '-' : '+';

Затем используйте его, как хотите:

printf ("%c %f", c, fabs(x));
1 голос
/ 22 июня 2019

С помощью ответов @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)));
...