2010-06-16 8 views
16

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

इसके बजाय मैं फ़ाइल पथ को आउटपुट करने के लिए एक पंक्ति का उपयोग करना चाहता हूं, फिर अगली फ़ाइल के लिए उस पंक्ति का पुन: उपयोग करें। क्या यह पूरा करने के लिए std::cout पर उत्पादन करने के लिए कोई वर्ण (या कोई अन्य कोड) है?

इसके अलावा, अगर मैं विंडोज के लिए इस उपकरण को फिर से लक्षित करना चाहता हूं, तो क्या समाधान दोनों प्लेटफार्मों के लिए समान होगा?

उत्तर

16

"\ r" दोनों खिड़कियों और मैक ओएस एक्स

कुछ तरह के लिए काम करना चाहिए:

std::cout << "will not see this\rwill see this" << std::flush; 
std::cout << std::endl; // all done 
+1

... और लिनक्स, और बहुत कुछ और सब कुछ। मुझे लगता है कि एकमात्र प्लेटफार्म जिसे अभी भी सैद्धांतिक रूप से चलाया जा सकता है, यह मैक ओएस के प्री-एक्स संस्करणों को सही तरीके से संभाल नहीं पाएगा। –

+0

वह वास्तव में "" प्रिंट करेगा " – Algoman

1

मैं करने के लिए एक मैक पहुँच नहीं है, लेकिन एक शुद्ध सांत्वना के दृष्टिकोण से, यह यह कैरिज रिटर्न और लाइन-फीड पात्रों के साथ कैसा व्यवहार करता है इस पर निर्भर करता है। यदि आप सचमुच एक या दूसरे को कंसोल पर भेज सकते हैं, तो आप सिर्फ कैरिज रिटर्न भेजना चाहते हैं।

मुझे पूरा यकीन है कि मैक * निक्स & विंडोज़ से अलग कैरिज रिटर्न और लाइन-फीड्स दोनों का व्यवहार करता है।

यदि आप इन-प्लेस अपडेट (उदा। वर्तमान लाइन को ओवरराइट करते हैं) की तलाश में हैं, तो मैं curses lib पर देखने की अनुशंसा करता हूं। यह एक प्लेटफार्म स्वतंत्र माध्यम प्रदान करना चाहिए जो आप खोज रहे हैं। (क्योंकि, मानक सी ++ का उपयोग करने के लिए, आप जो भी मांग रहे हैं उसका कोई प्लेटफ़ॉर्म स्वतंत्र माध्यम नहीं है)।

+0

मैक _used_ सीआर का इलाज विन/यूनिक्स से अलग तरीके से करने के लिए करता है जब वह यूनिक्स नहीं था। लेकिन अब यह है, और यह समस्या खत्म हो गई है। –

-2

std :: अदालत, लाइन की beguining को वापसी के रूप में interpretes "\ r" यदि आप "< < endl" हर बार जोड़ने के लिए whant न, का उपयोग करें "\ n"

std::cout << "this will work!\nSee... a new line!" << std::endl;

+0

\ n पार नहीं है - प्लेटफार्म संगत (जो fbrereto के लिए पूछा गया था) खिड़कियां वास्तव में केवल कर्सर को एक पंक्ति नीचे ले जाती है और उसी स्तंभ में रहता है, जब आप \ r \ n के बजाय \ n प्रिंट करते हैं – Algoman

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