2009-03-10 19 views
5

मैंने देखा है कि जब भी मैं एक प्रोग्राम लिखता हूं जो std::cin का उपयोग करता है कि यदि मैं चाहता हूं कि उपयोगकर्ता प्रोग्राम को समाप्त करने के लिए एंटर दबाए, तो मुझे वांछित व्यवहार प्राप्त करने के लिए std::cin.ignore() लिखना होगा। उदाहरण के लिए:दूसरा cin.ignore() आवश्यक क्यों है?

#include <iostream> 

int main(void) 
{ 
    int val = 0; 
    std::cout << "Enter an integer: "; 
    std::cin >> val; 

    std::cout << "Please press Enter to continue..." << std::endl; 

    std::cin.ignore(); 
    std::cin.ignore(); // Why is this one needed? 
} 

मैं यह भी देखा है कि जब मैं वास्तविक निवेश के लिए cin का उपयोग नहीं बल्कि सिर्फ अंत में ignore() कॉल के लिए, मैं केवल एक की जरूरत है।

+0

आप लिनक्स या Windows चला रहे हैं, इसकी वजह से हो सकता है एक the_stream::ignore(std::numeric_limits<streamsize>::max(), '\n'); की आवश्यकता है यदि आप विंडोज़ चला रहे हैं तो सीआरएलएफ समस्या ... – Ben

+0

सोलारिस पर वही "समस्या" होती है। सीआरएलएफ के साथ इसका कोई लेना-देना नहीं है। –

उत्तर

8

डिस्क: मैं वास्तव में क्या कर रहा हूं उसे सरल बना रहा हूं।

पहला यह निष्कर्ष निकालने के लिए कार्य करता है कि निष्कर्षण ऑपरेटर (>>) ने क्या नहीं खाया है। दूसरा दूसरे के लिए इंतजार कर रहा है \ n।

यह बिल्कुल वैसा ही है जब हम एक निकासी के बाद एक एसटीडी getline कर ::: कॉल एसटीडी से पहले :: getline()

+3

आह मैं देखता हूं। तो यदि आपके द्वारा पहले संकेत में दर्ज वर्ण "123 \ n" हैं, तो आप कह रहे हैं कि ऑपरेटर >>() छोड़ देता है कि "\ n" अकेला है, और पहला अनदेखा() इसे पढ़ता है; तो दूसरा अनदेखा() आपके लिए एक कुंजी दबाएगा और उसे पढ़ता है (दूसरा "\ n")। +1। –

+0

यही विचार है। –

0

यह अजीब बात है। आप किस प्लेटफॉर्म पर चल रहे हैं? परिभाषा के अनुसार, ignore निष्कर्ष निकालें और इनपुट स्ट्रीम से एन वर्णों को त्यागें या यदि यह ईओएफ हिट करता है तो यह बंद हो जाता है। यदि आप किसी भी पैरामीटर को निर्दिष्ट नहीं करते हैं तो यह 1 वर्ण निकालता है। विंडोज़ पर, लाइन एंडिंग में \r और \n दोनों शामिल हैं - कुल दो वर्ण (एक कैरिज रिटर्न एक नई लाइन के बाद)।

+0

मैंने सोचा कि पहले भी, लेकिन लाइब्रेरी को प्लेटफॉर्म का उपयोग करने वाली किसी भी पंक्ति समाप्ति योजना को अमूर्त माना जाता है, और आपका एप्लिकेशन कोड केवल "\ n" देखना चाहिए। –

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