2014-09-01 9 views
5

मुझे इनपुट से खाली लाइनों को पढ़ने और अंतर करने में परेशानी हो रही है।खाली लाइनें पढ़ें सी ++

number 

string 
string 
string 
... 

number 

string 
string 
... 

प्रत्येक संख्या तार के अनुक्रम के बाद एक इनपुट के अंत का प्रतिनिधित्व करता है एक इनपुट के शुरू और रिक्त पंक्ति का प्रतिनिधित्व करता है:

यहाँ नमूना इनपुट है। स्ट्रिंग एक वाक्यांश हो सकता है, न केवल एक शब्द।

मेरे कोड निम्नलिखित है:

int n; 

    while(cin >> n) { //number 

    string s, blank; 
    getline(cin, blank); //reads the blank line 

    while (getline(cin, s) && s.length() > 0) { //I've tried !s.empty() 
     //do stuff 
    } 
    } 

मैं CIN सीधे की कोशिश की है >> खाली है, लेकिन यह काम नहीं किया।

कोई मुझे इस मुद्दे को हल करने में मदद कर सकता है?

धन्यवाद!

+0

आप केवल 'सीन' दाएं से अनुक्रम पढ़ सकते थे? क्योंकि यह सभी खाली रिक्त स्थानों को अनदेखा करता है। तो रिक्त स्थान पढ़ने की कोई जरूरत नहीं है। – Diffy

उत्तर

5

के बाद आप इस लाइन के साथ नंबर पढ़ें:

while(cin >> n) { //number 

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

while(cin >> n) { //number 

    string s, blank; 
    getline(cin, blank); // reads the rest of the line that the number was on 
    getline(cin, blank); // reads the blank line 

    while (getline(cin, s) && !s.empty()) { 
     //do stuff 
    } 
    } 
+0

धन्यवाद !! यह काम किया :) –

+0

ऐसा नहीं है क्योंकि getLine() एक सफेद जगह चरित्र देखने पर रोकता है। तो पहला getLine() व्हाइटस्पेस चरित्र का उपभोग करेगा और दूसरा getLine() रिक्त रेखा का उपभोग करेगा। दिया गया समाधान वैसे भी सही है। – Diffy

+0

फिर इसे गेटलाइन नहीं कहा जाएगा ... –

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