2011-07-28 14 views
8

पर संकलित किया जा रहा है। सी ++ में पर्यावरण न्यूलाइन कैसे निर्धारित करता है? Google सी # और .NET के लिए कई परिणाम उत्पन्न करता है लेकिन मुझे गैर-सीएलआई सी ++ के लिए ऐसा करने का कोई तरीका नहीं दिखाई देता है।पर्यावरण के लिए न्यूलाइन कैरेक्टर को निर्धारित करना सी ++ प्रोग्राम

अतिरिक्त जानकारी: मुझे चरित्र के लिए const char* स्कैन करने की आवश्यकता है।

द्वारा "पर्यावरण न्यू लाइन" मैं विंडोज, \n लिनक्स पर, और \r मैक पर पर \r\n मतलब है।

+3

"स्थानीय" न्यूलाइन को आउटपुट क्यों करना आवश्यक है? मेरी इच्छा है कि लोग इस धारणा के साथ दुनिया को प्रदूषित करना बंद कर दें कि "\ r \ n" विंडोज़ पर एक नई लाइन है। विंडोज़ पर हर एक पाठ संपादक के बारे में बस "\ n" हैंडल करता है। मैंने कभी सुना है कि एकमात्र काउंटर उदाहरण नोटपैड है! –

+0

इस प्रश्न ने मुझे एक और स्पॉन बनाया: http://stackoverflow.com/questions/6865398/inserting-endline-into-a-stringstream –

+0

@Andre जिन्होंने आउटपुट के बारे में कुछ भी कहा? –

उत्तर

6

std::endl सिस्टम के लिए उपयुक्त एक नई लाइन डालें। रनटाइम पर स्ट्रिंग के रूप में न्यूलाइन अनुक्रम निर्धारित करने के लिए आप ostringstream का उपयोग कर सकते हैं।

#include <sstream> 

int main() 
{ 
    std::ostringstream oss; 
    oss << std::endl; 
    std::string thisIsEnvironmentNewline = oss.str(); 
} 

संपादित: * क्यों यह शायद काम नहीं करेगा पर नीचे टिप्पणी देखें।

#ifdef _WIN32 
    #define NEWLINE "\r\n" 
#elif defined macintosh // OS 9 
    #define NEWLINE "\r" 
#else 
    #define NEWLINE "\n" // Mac OS X uses \n 
#endif 
:


आप जानते हैं कि आपके प्लेटफार्मों विंडोज, मैक, और यूनिक्स तक ही सीमित रहेगा, तो आप पूर्वनिर्धारित संकलक मैक्रो का उपयोग कर सकते हैं (listed here) संकलन समय पर endline अनुक्रम यह निर्धारित करने के

अधिकांश गैर-विंडोज़ और गैर-ऐप्पल प्लेटफॉर्म कुछ प्रकार के यूनिक्स संस्करण हैं जो \n का उपयोग करते हैं, इसलिए उपरोक्त मैक्रोज़ को कई प्लेटफ़ॉर्म पर काम करना चाहिए। हां, मुझे सभी संभावित प्लेटफार्मों के लिए संकलन समय पर एंडलाइन अनुक्रम निर्धारित करने के लिए किसी भी पोर्टेबल तरीके से पता नहीं है।

+0

क्या यह करने का यही एकमात्र तरीका है? मैं इसे संकलित समय पर करना पसंद करूंगा। –

+0

@ सेठ: संकलन समय पर आपको लाइन ब्रेक के प्रकार को जानने की आवश्यकता क्यों है? –

+1

@Remy क्योंकि इसे रन टाइम पर कोई गणना की आवश्यकता नहीं है :) मुझे शायद इसके लिए बसना होगा। –

1

आम तौर पर #define के साथ। लेकिन, सरल अनुप्रयोगों के लिए, "टेक्स्ट मोड" में एक फ़ाइल खोलने से आपको जो चाहिए वह आपको देगा।

4

सी ++ (और सी) में स्वरूपित पाठ IO के लिए, नया लाइन वर्ण हमेशा '\n' है। यदि आप किसी दिए गए प्लेटफ़ॉर्म और फ़ाइल मोड के लिए नई लाइन के बाइनरी प्रस्तुति को जानना चाहते हैं, तो वांछित मोड में एक फ़ाइल खोलें (उदाहरण के लिए, टेक्स्ट या बाइनरी, यूटीएफ -8, यूटीएफ -16, एमसीबीएस, आदि), लिखना '\n', इसे बंद करें, इसे बाइनरी में दोबारा खोलें, पूरी फ़ाइल में पढ़ें, और '\n' की वास्तविक बाइनरी एन्कोडिंग का पता लगाएं। आपको end-of-file चरित्र के लिए भी खाता लेना पड़ सकता है।

+0

यह धारा-उन्मुख फ़ाइलों (जैसे यूनिक्स, डॉस, और विंडोज) के साथ सिस्टम के लिए काम करता है, लेकिन रिकॉर्ड-उन्मुख फ़ाइलों (जैसे वीएमएस पर) के लिए नहीं। कुछ प्रणालियों के लिए, अंत-रेखा संकेत एक वर्ण अनुक्रम के रूप में संग्रहीत नहीं है। –

+0

@Rob, यकीन है, लेकिन अब वीएमएस का उपयोग कौन करता है? :) (जे/के) – MSN

+0

अधिक गंभीरता से, _question_ भी वीएमएस में समझ में आता है? – MSalters

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