2010-11-04 9 views
37

मुद्रित (printf के साथ) जटिल संख्या कैसे मुद्रित करें? उदाहरण के लिए, अगर मैं इस कोड है:सी जटिल संख्या और printf

#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; 
} 
रूपांतरण विनिर्देशक ..what

(या कुछ और) मैं बजाय का उपयोग करना चाहिए "???"

उत्तर

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

मैं वहाँ C99 जटिल प्रकार के लिए एक विशिष्ट प्रारूप विनिर्देशक है विश्वास नहीं है।

+0

मैं देखता हूं, – gameboy

+0

सहायता के लिए धन्यवाद, मैं यहां गलत हो सकता हूं, लेकिन क्रिल() और सीमैग() दोनों वापसी युगल के रूप में, प्रारूप विनिर्देशक '% f' के बजाय '% lf' नहीं होना चाहिए? –

+2

अतिरिक्त सुधार - मैक्रो जो काल्पनिक भाग के हस्ताक्षर पर प्रतिक्रिया करता है: '# परिभाषित printfc (सी) printf ("% f% c% fi ", creal (c), (cimag (c)> = 0.0f)? + ':' \ 0 ', सीमैग (सी)) ' –

-1

क्योंकि जटिल संख्या दो वास्तविक संख्या बैक-टू-बैक स्मृति में,

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

कर के रूप में अच्छी तरह से काम करेंगे के रूप में संग्रहीत किया जाता है, लेकिन क्योंकि प्रकार और मानकों की संख्या नहीं करता है 'जीसीसी साथ संकलक चेतावनी उत्पन्न करता है प्रारूप से मेल नहीं खाता। डीबगिंग करते समय मैं इसे चुटकी में करता हूं लेकिन उत्पादन कोड में ऐसा नहीं करता हूं।

+1

मैं तर्क दूंगा कि अपरिभाषित व्यवहार पर निर्भर डीबगिंग एक बुरा विचार है। अपरिभाषित व्यवहार अक्सर अन्य सूक्ष्म बग का कारण बन सकता है, जिससे समस्या बढ़ जाती है। इसके अलावा उत्पादन में समाप्त होने के लिए फेंकने वाले डीबगिंग कोड के लिए यह बहुत आम है। –

+2

यह केवल तभी काम करेगा जब प्लेटफॉर्म के कॉलिंग सम्मेलन निर्दिष्ट करते हैं कि जटिल संख्याएं दो वास्तविक संख्याओं के समान ही पारित की जाती हैं, जो कि किसी भी तरह से गारंटीकृत नहीं है। –

+2

हालांकि, यह केवल एक अच्छा हैक, केवल डीबगिंग के लिए है। विचार के लिए आपका धन्यवाद। –

3

दें %+f काल्पनिक भाग के लिए आप के लिए सही संकेत चुनें:

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

आउटपुट:

0.000000+1.000000i 

ध्यान दें कि i अंत में है।