2011-02-13 14 views
13

कंसोल में बदलते संख्या प्रदर्शित करने के लिए सबसे आसान तरीका क्या है पर बदल रहा है उत्पादन? मेरे पास C++ में एक सामान्य कमांडलाइन प्रोग्राम है जो cout का उपयोग करता है, लेकिन मैं एक नई संख्या मुद्रित किए बिना 100 तक की प्रगति का प्रतिनिधित्व करने वाला प्रतिशत संख्या प्रदर्शित करना चाहता हूं। यह कैसे किया जाता है? (यदि यह मायने रखता है: मैं विंडोज 7 पर हूं) आपके उत्तरों के लिए धन्यवाद!सी ++ सांत्वना

+0

तो तुम प्रिंट कहना और संख्या को मिटाने के लिए क्या मतलब है? – rda3mon

+1

@ रिंगो: हाँ। आप इसे सामान्य प्रश्न में भी बढ़ा सकते हैं: मैं कंसोल पर पहले मुद्रित कुछ भी कैसे बदलूं? मैंने जो भी देखा और दिलचस्प पाया है: आउटपुट टेक्स्ट का रंग बदलें। –

+0

@ नवाज: 'कमांडलाइन' टैग क्या है? –

उत्तर

29

जब मैं ve ’ की जरूरत है कि मैं सिर्फ उत्पादन एक गाड़ी वापसी चरित्र है, C++ \r

प्रत्येक बार आउटपुट फ्लश करने के लिए याद रखें, उदा।

cout << "\r" << x << "% completed.  " << flush; 

रिक्त स्थान अंत में माइक्रोसॉफ्ट की तरह अस्थिर प्रगति के मामले में लाइन पर पिछले उत्पादन स्पष्ट करने के लिए।

enter image description here

11

बैकस्पेस वर्ण का उपयोग करें।

cout << "10%"; 
// ... 
cout << "\b\b\b20%"; 
5

मैं सामान्य रूप से प्रगति के बारे में जानकारी के बाद एक गाड़ी वापसी जगह। इस तरह, कोई भी अन्य आउटपुट सामान्य दिखाई देगा (जब तक कि प्रगति जानकारी को पूरी तरह से ओवरराइट करने के लिए लाइन में पर्याप्त वर्ण हों)।

cerr<<percentage<<"% \r"; 

वैसे, मैं स्थिति/नैदानिक ​​इस प्रकार की जानकारी के लिए के बजाय cerr अदालत उपयोग करने के लिए इतना है कि अदालत वास्तविक सामग्री के लिए आरक्षित किया जा सकता है पसंद करते हैं। इस तरह आप सामान्य प्रोग्राम आउटपुट को फ़ाइल में रीडायरेक्ट कर सकते हैं और अभी भी कंसोल में प्रगति देख सकते हैं। इसके अलावा, सीर के साथ, आपको "फ्लश" का उपयोग करने की आवश्यकता नहीं है।

+0

लेकिन आप शायद ही कभी स्टडीन/स्टडआउट के माध्यम से हफमैन संपीड़न में फ़ाइल पास करेंगे, है ना? –

+2

@ फ़ेलिक्स: मैं निश्चित रूप से करूँगा! लेकिन शायद विंडोज़ पर नहीं। जैसा कि मुझे याद है, आपको सी ++ स्ट्रीम लाइब्रेरी के माइक्रोसॉफ्ट के संस्करण को बताने के लिए गैर-मानक कॉल का उपयोग करना होगा, जो आपके डेटा स्ट्रीम में मौके से "\ r \ n" अनुक्रमों को संशोधित नहीं कर सकता है। लिनक्स पर, इस तरह का उपयोग stdin/stout का उपयोग बहुत शक्तिशाली और बहुत आम है। – nobar

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