2011-04-03 18 views
6

का उपयोग किए बिना एक नंबर मुद्रण यह संभव मुद्रित करने के लिए है (stdout लिए, या एक फ़ाइल) एक नंबर (int, float, double, long, आदि) वास्तव में *printf कार्य (printf, fprintf में से किसी का उपयोग किए बिना, sprintf, snprintf, vsprintf, ...)?* printf

+4

'float' और' double' पूर्णांकों नहीं हैं। – dreamlax

+0

आपको इसकी आवश्यकता क्यों होगी? की – gnud

+1

संभव डुप्लिकेट [कैसे आप एक IEEE754 संख्या प्रिंट आउट है (printf के बिना)?] (http://stackoverflow.com/questions/4274926/how-do-you-print-out-an-ieee754-number-without- printf) –

उत्तर

7

अपने libc एक itoa() समारोह में शामिल है, तो आप इसे उपयोग कर सकते हैं एक स्ट्रिंग के लिए एक पूर्णांक कन्वर्ट करने के लिए।
नहीं तो आप एक स्ट्रिंग अपने आप से एक नंबर परिवर्तित करने के लिए कोड लिखने के लिए होगा।

itoa() कार्यान्वयन C Programming Language, 2nd Edition - Kernighan and Ritchie से पेज 64:

/* itoa: convert n to characters in s */ 
void itoa(int n, char s[]) 
{ 
    int i, sign; 

    if ((sign = n) < 0) /* record sign */ 
     n = -n;   /* make n positive */ 
    i = 0; 
    do { /* generate digits in reverse order */ 
     s[i++] = n % 10 + '0'; /* get next digit */ 
    } while ((n /= 10) > 0); /* delete it */ 
    if (sign < 0) 
     s[i++] = '-'; 
    s[i] = '\0'; 
    reverse(s); 
} 
+2

ओपी को पता होना चाहिए कि यह लिनक्स पर मौजूद नहीं है। यदि वह के एंड आर को धूलता है और पृष्ठ 56 पर जाता है, तो उसे एक कार्यान्वयन दिखाई देगा। –

+0

अच्छा विचार है, और itoa को लागू करने के लिए भी मुश्किल नहीं है या तो: http://codepad.org/fUlU6thO – hiobs

+0

ओह, यहां तक ​​कि कश्मीर एंड आर INT_MIN .. – lowq

2

सीधे शब्दों में लिखें() फ़ंक्शन का उपयोग और उत्पादन खुद को फ़ॉर्मेट।

3

खैर, पूर्णांकों के लिए ऐसा करने के लिए, लेकिन काम चल बिन्दु संख्या के लिए एक निष्पक्ष थोड़ा और अधिक जटिल है, और किसी को पहले से ही उस के लिए एक स्पष्टीकरण के लिए सूचक पोस्ट किया गया है इसकी मुश्किल नहीं। पूर्णांक के लिए, आप कुछ इस तरह कर सकते हैं:

void iprint(int n) 
    { 
    if(n > 9) 
     { int a = n/10; 

     n -= 10 * a; 
     iprint(a); 
     } 
    putchar('0'+n); 
    } 
0

मैं ज्यादातर लोगों कि इस प्रश्न के पार चलो क्योंकि वे अपने स्वयं धारावाहिक tx कार्यों लिखा है और कुछ संख्या मुद्रित करने के लिए की जरूरत है मान। आपको अपने सेटअप के साथ फिट करने के लिए पुट कॉल को संशोधित करने की आवश्यकता होगी।

void print_int(int num) 
{ 
    if (num < 0) 
    { 
     putc('-'); 
     num = -num; 
    } 
    else if (num == 0) 
    { 
     putc('0'); 
     return; 
    } 
    while (num != 0) 
    { 
     putc ('0'+ (num%10)); 
     num /= 10; 
    } 
} 

यह एक संख्या को विपरीत में प्रिंट करेगा।

+0

प्रबंधन नहीं करती है सवाल यह है कि रिवर्स में एक नंबर मुद्रित करने के लिए नहीं था। यह एक संख्या मुद्रित करने के लिए था। –

2

इस सही क्रम परिणाम होगा:

void print_int(int num){ 
    int a = num; 

    if (num < 0) 
    { 
     putc('-'); 
     num = -num; 
    } 

    if (num > 9) print_int(num/10); 

    putc('0'+ (a%10)); 
}