2013-11-27 6 views
6

जब मैं सही मान (एक पूर्णांक) में प्रवेश करता हूं तो यह अच्छा होता है। लेकिन जब मैं एक चरित्र में प्रवेश करता हूं, तो मुझे अनंत लूप मिलता है। मैंने इस कोड के हर तरफ देखा है और इसके साथ कोई समस्या नहीं मिली। ये क्यों हो रहा है? मैं विंडोज़ पर जी ++ 4.7 का उपयोग कर रहा हूं।यह कोड मुझे अनंत लूप क्यों देता है?

#include <iostream> 
#include <limits> 

int main() 
{ 
    int n; 
    while (!(std::cin >> n)) 
    { 
     std::cout << "Please try again.\n"; 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
     std::cin.clear(); 
    } 
} 

इनपुट: x
आउटपुट:

enter image description here

+0

क्या सीआर जैसे एक अनूठा चरित्र है जब आप टाइप करते हैं या एक चरित्र को पकड़ते हैं तो इनपुट के साथ आते हैं? –

+0

बस 'scanf' का उपयोग करें। रास्ता आसान और स्पष्ट है। –

+0

@Joker_vD लेकिन मैंने सोचा कि यह सी ++ था ... –

उत्तर

6

यह क्योंकि आपके ठीक हो आपरेशन गलत क्रम में हैं है। सबसे पहले त्रुटि को साफ़ करें और फिर बफर साफ़ करें।

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

धन्यवाद। मैं भी नहीं बता सका! :) –

+1

बिंदु यह है कि स्ट्रीम त्रुटि स्थिति में है 'अनदेखा' तब तक असफल हो जाएगा जब तक आप पहले त्रुटि को साफ़ नहीं करते। – john

4

आप clear करने के लिए पहली त्रुटि राज्य है, और तोignore unparsable बफर सामग्री। अन्यथा, ignore ऐसी स्ट्रीम पर कुछ भी नहीं करेगा जो एक अच्छी स्थिति में नहीं है।

आपको अलग-अलग स्ट्रीम के अंत तक पहुंचने के लिए सौदा करने की आवश्यकता होगी।

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