2012-02-07 16 views
5

हटाएं मैं एक छोटा सा फ़ंक्शन बनाना चाहता हूं, जो कंसोल में प्रतिशत में वर्तमान स्थिति दिखाना चाहिए। फ़ंक्शन को केवल लाइन में वर्तमान मान दिखाना चाहिए। तो मुझे अंतिम आउटपुट को हटाना होगा। क्या यह संभव है? सबसे अच्छा मामला कुछ एएनएसआई सी सामान होगा, कार्यक्रम लिनक्स और खिड़कियों पर काम करना चाहिए।सी प्रिंटफ आउटपुट

मुझे "\033[J" जैसे कुछ भागने के दृश्य मिल गए हैं, लेकिन यह काम नहीं कर रहा है।

संपादित

खैर मैं इसके साथ की कोशिश की:

void PrintProcessBar(int i, int n) { 
    float ratio = i/(float)n;  
    printf("%.3d\b\b", (int)(ratio * 100)); 
    fflush(stdout); 
} 

लेकिन यह सिर्फ शून्य के बहुत सारे ... क्या गलत हो गया था मुद्रित? अगर मैं तीन \b का उपयोग करता हूं तो मुझे कुछ भी नहीं मिलता है।

समाधान

float ratio = (i/(float)n) * 100; 
printf("\b\b\b\b"); 
fflush(stdout); 
printf("%.3d%c", (int)ratio, 37);   
fflush(stdout); 

i = वर्तमान स्थिति। एन = अधिकतम रन।

मैं 4 \b का उपयोग करता हूं क्योंकि, फ़ंक्शन की पहली कॉल पर यह 4 रिक्त स्थान निकाल देगा।

ग्रीटज़।

+1

उत्तर प्रश्नों से अलग रखा जाना चाहिए। यदि आप अपने प्रश्न का उत्तर देना चाहते हैं, तो आप इस पृष्ठ के नीचे [अपने प्रश्न का उत्तर दें] बटन पर क्लिक करके ऐसा कर सकते हैं। – brandaemon

उत्तर

10

\b बैकस्पेस के लिए भागने का अनुक्रम है। आप लाइन को हटाने के लिए रिक्त स्थान के साथ इसका उपयोग कर सकते हैं।

उदाहरण के लिए:

printf("98%"); 
fflush(stdout); 
// sleep some time 
printf("\b\b\b99%"); 
fflush(stdout); 

यह 98% प्रिंट चाहिए और फिर 99% से बदल दें।

+0

ठीक है, मैंने कोशिश की है, लेकिन कुछ गलत हो गया। कृपया मेरा ** संपादित करें ** देखें। धन्यवाद। Greetz। – hofmeister

+0

आप तीन अक्षरों को प्रिंट कर रहे हैं, लेकिन केवल दो बार लौटते हैं, आपको शायद प्रिंट की एक ही राशि वापस करने की आवश्यकता होती है (दूसरा \ b काम करना चाहिए)। – MByD

+0

मैंने लिखा है कि, यदि मैं तीन '\ b'' printf' का उपयोग करता हूं तो कुछ भी प्रिंट नहीं करेगा। – hofmeister

6

आप क्या देख रहे हैं \r यह कैरिज रिटर्न है। गाड़ी को लाइन की शुरुआत में वापस ले जाता है। \n का उपयोग करें क्योंकि यह एक पंक्ति से नीचे जाएगा।

क्योंकि \ r पाठ को हटा नहीं देता है, लेकिन आपको केवल ओवरराइट करने की अनुमति देता है, आपको यह सुनिश्चित करना होगा कि आप अपनी लाइन को साफ़ करने के लिए पर्याप्त टेक्स्ट (रिक्त स्थान यदि आपको आवश्यकता हो) प्रिंट करें।

+0

ओह, क्या यह सिस्टम पर निर्भर नहीं है? –

+0

एंडलाइन सिस्टम पर निर्भर करता है ('\ n' लिनक्स और मैक के लिए, \ \ \ \' विंडोज़ के लिए, \ "\ n \ r'" Acorn बीबीसी और आरआईएससी ओएस स्पूल किए गए टेक्स्ट आउटपुट "और' \ r' कमोडोर के लिए 8-बिट मशीनें, एकोर्न बीबीसी, टीआरएस -80, ऐप्पल II परिवार, मैक ओएस संस्करण 9 और ओएस -9 [स्रोत] तक (http://en.wikipedia.org/wiki/Newline)) – Eregrith

+0

तो आप 9 मैक ओएस पर 9 – Eregrith

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