2013-02-27 27 views
6

मैं मानक इनपुट से पढ़ने की कोशिश कर रहा था। पहली पंक्ति उन पंक्तियों की संख्या है जिन्हें मैं पढ़ूंगा। जिन पंक्तियों को मैं पढ़ता हूं उन्हें फिर से मुद्रित किया जाएगा। यहां कोड है:cin.get() एक लूप में

#include <iostream> 

using namespace std; 

int main() 
{ 
    int n; 
    cin >> n; 
    for (unsigned int i = 0; i < n; ++i) 
    { 
     char a[10]; 
     cin.get (a, 10); 
     cout << "String: " << a << endl; 
    } 
    return 0; 
} 

जब मैं इसे चलाता हूं और लाइनों की संख्या देता हूं, तो कार्यक्रम निकलता है। मुझे पता नहीं चला कि क्या हो रहा है, इसलिए मैंने इसे यहां पूछने का फैसला किया है।

अग्रिम धन्यवाद।

+0

मुझे नहीं लगता कि यह आपके जैसा व्यवहार करना चाहिए .. एक बार फिर कोशिश करें। –

+0

फिर से प्रयास किया - एक ही बग –

उत्तर

6

। अपने विशेष मामले में, इस लाइन:

std::cin >> n; 

संख्या आपके द्वारा लिखे गए खपत है, लेकिन इनपुट स्ट्रीम में '\n' छोड़ देता है।

बाद में, इस लाइन:

cin.get (a, 10); 

(क्योंकि इनपुट धारा अभी भी '\n' पर इंगित किया जाता है) कोई डेटा खपत करता है। अगला आविष्कार भी इसी कारण से कोई डेटा नहीं लेता है, और इसी तरह।

प्रश्न तब बन जाता है, "मैं '\n' का उपभोग कैसे करूं?"

आप एक चरित्र पढ़ सकते हैं और इसे फेंक कर सकते हैं::

cin.get(); 

आप एक पूरी लाइन पढ़ सकता है, लंबाई की परवाह:

std::getline(std::cin, some_string_variable); 

आप उपेक्षा कर सकता तरीके के एक जोड़े हैं वर्तमान लाइन के बाकी:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

कुछ संबंधित सलाह के रूप में, मैं कभी भीका उपयोग नहीं करता। मैं हमेशा पसंद करता हूं: std::getline(std::istream&, std::string&)

+0

धन्यवाद के लिए धन्यवाद, जिसने –

1

मुझे लगता है कि यह नहीं जानते कि आपको CIN उपयोग कर रहे हैं के लिए महत्वपूर्ण है: मिश्रण स्वरूपित और अस्वरूपित इनपुट समस्याओं से भरा है http://www.cplusplus.com/forum/articles/6046/

+0

उपयोगी लिंक –

2

cin.get(a, 10) से पहले 0 अपनी समस्या को हल करेगा क्योंकि यह इनपुट स्ट्रीम में शेष समाप्ति को पढ़ेगा।

+0

धन्यवाद किया, जिसने मदद की –

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