2010-11-04 14 views
37

Karmaşık numara nasıl yazdırılır (printf ile)? Bu kodu varsa Örneğin,:C Karmaşık sayı ve yazdırma f

#include <stdio.h> 
#include <complex.h> 
int main(void) 
{ 
    double complex dc1 = 3 + 2*I; 
    double complex dc2 = 4 + 5*I; 
    double complex result; 

    result = dc1 + dc2; 
    printf(" ??? \n", result); 

    return 0; 
} 
dönüşüm belirteçleri ..what

(veya başka bir şey) yerine kullanmalısınız "???"

cevap

43
printf("%f + i%f\n", creal(result), cimag(result)); 

C99 karmaşık türü için belirli bir biçim belirtecinin olduğuna inanmıyorum.

+0

Görüyorum, yardım için teşekkürler – gameboy

+0

Burada yanlış olabilir, ancak creal() ve cimag() iki katına döner, biçim belirteci '% f' yerine '% lf' olmamalıdır? –

+2

Ek iyileştirme - hayali parçanın işaretine tepki veren makro: '#define printfc (c) printf ("% f% c% fi ", creal (c), (cimag (c)> = 0.0f)? '+ ':' \ 0 ', cimag (c)) ' –

-1

karmaşık sayı hem de çalışacak

printf("%g + i%g\n", result); 

yapıyor arka arkaya bellekte iki gerçek numaraları gibi saklanan, ancak parametrelerin tipi ve sayısı kokan çünkü gcc ile derleyici uyarıları üretir Çünkü formatı eşleştirin. Bunu hata ayıklaması yaparken bir tutamla yapıyorum ama üretim kodunda yapmıyorum.

+1

Bkz. Undefined davranışa dayanarak hata ayıklama kötü bir fikirdir. Tanımsız davranışlar, çoğu zaman, diğer ince hatalara neden olarak, sorunu daha da kötüleştirebilir. Ayrıca, üretimde bitmek üzere atılacak hata ayıklama kodu için çok yaygındır. –

+2

Bu, yalnızca platformun çağrı kuralları karmaşık sayıların iki gerçek sayı ile aynı şekilde iletildiğini belirtir, ancak hiçbir şekilde garanti edilmez. –

+2

Ancak, sadece hata ayıklama için oldukça iyi bir hack. Fikir için teşekkürler. –

3

%+f hayali bölümü için sizin için doğru işareti seçmek edelim:

printf("%f%+fi\n", crealf(I), cimagf(I)); 

Çıktı: i sonunda olduğunu

0.000000+1.000000i 

Not.