2011-09-14 5 views
8

रीसेट नहीं करता है मेरे पास निम्न लूप है। यह EndOfFile जब तक संख्या पढ़ना चाहिए, या उपयोगकर्ता इनपुट -999cin.clear() cin ऑब्जेक्ट

int arr[100]; 

int index; 

for (index = 0; index < 100; index++) 
{ 
cin >> arr[index]; 
if (!cin) 
{ 
    cin.clear(); 
    index--; 
    continue; 
} 
if (arr[index] == -999) 
{ 
    break; 
} 
} 

उपयोगकर्ता इनपुट गलत बात है, इस तरह के कुछ char रों के रूप में, इस पाश हमेशा के लिए clear त्रुटि राज्य ing या रोके बिना दोहराया जा रहा है।

उत्तर

8

clear पर कॉल करने के बाद, आपको किसी भी तरह से स्ट्रीम से अमान्य इनपुट को हटाना होगा। यहाँ एक तरीका है:

cin >> arr[index]; 
if (!cin) 
{ 
    cin.clear(); 
    std::string ignoreLine; //read the invalid input into it 
    std::getline(cin, ignoreLine); //read the line till next space 
    index--; 
    continue; 
} 

क्योंकि जब cin अमान्य इनपुट को पढ़ने के लिए विफल रहता है, यह धारा में रहता है यह। इसे कुछ तरीकों से हटा दिया जाना है। मैंने बस इसे पढ़ा और अनदेखा किया।

तुम भी उपयोग कर सकते हैं ignore के रूप में:

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

जो बेहतर है में मेरी राय प्रदान की आदानों अंतरिक्ष विभाजित होते हैं (और यदि आप नहीं करना चाहती निरीक्षण अमान्य इनपुट)। online doc का कहना है:

IStream :: उपेक्षा

IStream & उपेक्षा (streamsize n = 1, पूर्णांक परिसीमक = EOF);

निकालें और त्यागने वर्ण इनपुट अनुक्रम से

अर्क पात्रों और उन्हें छोड़ देता है।

निष्कर्षण समाप्त होता है जब एन वर्ण निकाले जाते हैं और त्याग दिया जाता है या जब चरित्र डिलीम पाया जाता है, जो भी पहले आता है। बाद के मामले में, डेलीम चरित्र भी निकाला जाता है।

+1

इसलिए अनंत लूप !! –

+0

@ श्री डीडीडी: बिल्कुल। :-) – Nawaz

+0

@ श्री डीडीडी: आपके द्वारा प्रदान किए जाने वाले अमान्य इनपुट में क्या? – Nawaz

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