5

मेरे पास printf का उपयोग करने के बारे में कोई प्रश्न है।प्रिंटफ फ़्लोटिंग पॉइंट मानों के लिए स्ट्रिंग प्रारूप

char str[8]; 
float val = 2.334563; 
sprintf(str, format, val); 
printf("val = %s.\n", str); 

val = -23.34563; 
sprintf(str, format, val); 
printf("val = %s.\n", str); 

val = -0.02334563; 
sprintf(str, format, val); 
printf("val = %s.\n", str); 

val = 233; 
sprintf(str, format, val); 
printf("val = %s.\n", str); 

उम्मीद उत्पादन इस प्रकार है:

val = +2.3345 
val = -23.345 
val = -0.0233 
val = +233.00 

क्या प्रारूप स्ट्रिंग मुझे लगता है कि के लिए की जरूरत है? आपके ध्यान देने के लिए धन्यवाद!

उत्तर

3

क्या अच्छे पुराने %f हुआ

+0

वांछित आउटपुट नहीं मिलता है। उनके सवाल को और अधिक सीधे पूछना चाहिए। –

+0

@ जोमग्रीग्राथ: यह क्यू स्पष्ट रूप से गृहकार्य की गंध करता है और मैं पॉइंटर्स या विचार देने के अलावा होमवर्क प्रश्नों के लिए कोड के किसी भी प्रकार को लिखने की सराहना नहीं करता हूं। ** कारण: ** मैं नहीं चाहता कि एक प्रोग्रामर मेरे बगल में बैठा हो (हालांकि अब से कुछ साल पहले) जो एक संकेत दिए गए स्रोत कोड को नहीं लिख सकता है। –

+0

ठीक है धन्यवाद। मैं स्टैक ओवरफ्लो के लिए नया हूं और मुझे एहसास नहीं हुआ। बस सवालों का जवाब देने की कोशिश कर रहा है। मैं एक शौकिया प्रोग्रामर हूं जो स्कूल नहीं गया है। होमवर्क असाइनमेंट के बारे में नहीं सोचा था। भविष्य में ऐसा करना याद रखेगा। –

0
"%f" 

उदाहरण

printf("%f\n", floatVal); 
+0

मुझे निश्चित आकार आउटपुट स्ट्रिंग की आवश्यकता है। – user1020803

+0

और न ही "% f" 'सकारात्मक संख्याओं के सामने + चिह्न दिखाएगा। –

+0

"% + एफ" संकेत दिखा देंगे ... लेकिन इस पूरे समस्या नहीं है ... – user1020803

1

उपयोग snprintf() सहित \0

स्वरूप बिल्कुल 8 अक्षरों में स्ट्रिंग को काटना स्ट्रिंग:

"%#+.5f" 

% modifier 
# force decimal place 
+ show + or - 
.5 precision of 5 
f use precision as places after decimal 

कोड:

char str[8]; 
float val = 2.334563; 
snprintf(str,8, "%#+.5f", val); 
printf("val = %s\n", str); 

val = -23.34563; 
snprintf(str,8, "%#+.5f", val); 
printf("val = %s\n", str); 

val = -0.02334563; 
snprintf(str,8, "%#+.5f", val); 
printf("val = %s\n", str); 

val = 233.001; 
snprintf(str,8, "%#+.5f", val); 
printf("val = %s\n", str); 

आउटपुट:

val = +2.3345 
val = -23.345 
val = -0.0233 
val = +233.00 
val = +0.0003 
+0

मैं snprintf लगता है (str, 8, "% # + 5F।", 0.0003); सभी – user1020803

+0

@ user1020803 का सबसे अच्छा यह सभी मामलों में काम करता है। मेरे सभी परिवर्तनों में खो गया यह सुनिश्चित नहीं है कि मैं अभी भी snprintf() पर स्विच करने के बाद क्यों सिग अंजीर का उपयोग कर रहा था। धन्यवाद। प्रतिबिंबित करने के लिए संपादित। –

0

केवल एक चीज है कि मैं के साथ आ सकता है इस प्रकार है:

const char *format = "val = %+6.*f\n"; 
int places_past_decimal = ???; 
printf(format, places_past_decimal, 2.334563f); 

इस मामले में, आप पारित करने के लिए की आवश्यकता होगी एक अतिरिक्त तर्क (places_past_decimal) जो उस संख्या में शेष अंकों की संख्या है जो संख्या के बाईं ओर उपयोग नहीं किए जाते हैं ।

+0

मैंने इसके बारे में सोचा, लेकिन सबसे अच्छा समाधान की उम्मीद की। – user1020803

1

निम्नलिखित (लगभग) जो आप चाहते हैं वह करता है। ध्यान दें कि मैंने str सरणी में वर्णों की संख्या 7 से 8 तक बदल दी है; चूंकि आपके सभी आउटपुट स्ट्रिंग्स में 7 वर्ण होते हैं, sprintf द्वारा निष्पादित पूर्ण समाप्ति अन्यथा बफर ओवरफ़्लो का कारण बनती है।

मेरे परिणामों और आपके बीच का एकमात्र अंतर sprintf द्वारा किया गया राउंडिंग है। AFAIK, इसके आस-पास जाने का एकमात्र तरीका floor का उपयोग करके मुद्रित करने के लिए उस नंबर को पूर्व-छीनना है; उदाहरण के लिए, गोलाई float f = floor(1.8888 * 100)/100;

#include <stdio.h> 

int main(void) 
{ 
    char str[8]; 

    { 
    float val = 2.334563f; 
    sprintf(str, "%+6.*f", 4, val); 
    printf("val = %s.\n", str); 
    } 

    { 
    float val = -23.34563f; 
    sprintf(str, "%+6.*f", 3, val); 
    printf("val = %s.\n", str); 
    } 

    { 
    float val = -0.02334563f; 
    sprintf(str, "%+6.*f", 4, val); 
    printf("val = %s.\n", str); 
    } 

    { 
    float val = 233.0f; 
    sprintf(str, "%+6.*f", 2, val); 
    printf("val = %s.\n", str); 
    } 

    return 0; 
} 

आउटपुट के बिना 2 अंक मुद्रित करने के लिए:

val = +2.3346. 
val = -23.346. 
val = -0.0233. 
val = +233.00. 
+0

हां, मैं न्यूल – user1020803

+0

के बारे में भूल गया, इसके लिए कोड में मैन्युअल रूप से दशमलव स्थानों की आवश्यक संख्या की गणना करने की आवश्यकता है। किसी भी मामले के लिए कोड के साथ ऐसा करने का तरीका क्या है? –

संबंधित मुद्दे