2011-08-10 39 views
5

मैंने उबंटू पर एक प्रोग्राम बनाया जो विंडोज (और काम करता है) के लिए विकसित किया गया था।अजीब cout व्यवहार

string s = values_[9]; 
cout << s << endl; 
cout << s << "x\n"; 

इस उत्पादन उत्पादन:

high 
xigh 

दूसरी पंक्ति के लिए अपेक्षित आउटपुट "highx" है Ubuntu पर, मैं इस कोड को देखते हैं। मुझे पता है कि value_ [9] का मान मूल रूप से एक फ़ाइल (विंडोज़ पर लिखा गया) से पढ़ा जाता है। अन्य तारों को प्रिंट करना सामान्य रूप से काम करता प्रतीत होता है।

यहां क्या हो रहा है?

+2

क्या मान है? – Itsik

उत्तर

8

cat -A के माध्यम से अपने आउटपुट पाइप के साथ कमांड चलाएं। शायद या तो s का मान, या endl द्वारा उत्पादित आउटपुट आपको '\r' वर्ण दे रहा है, जो आमतौर पर कर्सर को लाइन की शुरुआत में भेजता है।

संपादित करें: आगे विचार पर, '\r' भटक s में लगभग निश्चित रूप से endl द्वारा उत्पादित आउटपुट में नहीं है। मैंने सोचा था कि कुछ मज़ेदार लोकेल सामान चल रहे हैं, लेकिन s"high\r" के बराबर लक्षण बताते हैं।

EDIT2: आपके सिस्टम cat -A नहीं है, तो (यह एक जीएनयू विस्तार है), od -ccat -v कोशिश या, यदि आप हताश कर रहे हैं।

+0

+1 (जोड़ें "लेकिन विंडोज़ पर नहीं, इसलिए अलग-अलग अवलोकन।") –

+0

असल में, \ r'' कर्सर को विंडोज़ पर लाइन की शुरुआत में भेजता है (आप कहां लिखते हैं इसके आधार पर, मुझे लगता है, लेकिन यह एक 'cmd' विंडो में उस तरह से काम करता है)। अंतर यह है कि विंडोज़ टेक्स्ट फ़ाइलों में लाइन टर्मिनेटर के रूप में \ "\ r \ n" 'का उपयोग करता है, जबकि यूनिक्स '" \ n "' का उपयोग करता है। अच्छी तरह से व्यवहार सॉफ्टवेयर शायद सिस्टम पर अलग '' \ r'' वर्णों का उत्पादन नहीं करेगा। –

+0

ठीक है, लेकिन आउटपुट के मुताबिक _is_ एक पृथक '\ r' (अन्यथा 'x' अपनी लाइन पर होगा)। –

3

शायद क्या हो रहा है, यह है कि values_[9] में \r है।

4

आपके द्वारा प्रिंट की जाने वाली स्ट्रिंग में कैरिज रिटर्न '\r' है। क्या हो रहा है कि आप high प्रिंट कर रहे हैं, फिर कैरिज रिटर्न, जो कर्सर को लाइन की शुरुआत में वापस रखता है। फिर, जब आप x प्रिंट करते हैं, तो यह लाइन पर पहले अक्षर को ओवरराइट करता है।

आप या तो (जैसे dos2unix(1) या कई अन्य विकल्पों के साथ) स्रोत फ़ाइल से गाड़ी वापसी निकाल देना चाहिए, या में फ़ाइल को पढ़ने के बाद गाड़ी वापसी पट्टी करने के लिए अपने कोड बदल जाते हैं।

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