2017-04-09 10 views
5

मैंने नीचे दिए गए कोड के साथ अलग-अलग इनपुट पास करने का प्रयास किया है, लेकिन संदेश मुद्रित करने में असफल रहा है: "ओह, आपने एएससीआईआईआई चार दर्ज नहीं किया है, अकेले एक या वाई है!" मैंने विभिन्न यूनिकोड वर्णों में प्रवेश किया है जो कि चार प्रकार के नहीं हैं (मूल रूप से एएलटी + यादृच्छिक संख्याओं, जैसे ™, š, ², Ž, ± में उचित पेंचिंग। इनमें से कोई भी त्रुटि उत्पन्न नहीं करता है। क्या सीन चुपचाप उन अनदेखा या त्यागें जो इनपुट नहीं हैं ASCII वर्णक्या std :: cin कमांड लाइन में उपयोगकर्ता इनपुट को चार प्रकार के चर के साथ एक चर में पास करने में विफल रहता है?

std::cout << "Would you like to play again? Enter y or n: "; 
std::cin >> yOrN; 
isChar = std::cin.fail(); 
//check if the user did not enter an ASCII char, e.g. test with a Unicode character 
if (isChar) 
{ 
    std::cout << "Oops, you did not enter an ASCII char, let alone one that is y or n!\n"; 
    std::cin.clear(); 
} 

ओएस: Windows 10 64 बिट, 64-आधारित प्रोसेसर संकलक: दृश्य स्टूडियो समुदाय 2015

मैं "एक गैर ASCII वर्ण निकालने के लिए खोज के माध्यम से इस समस्या को हल करने में सक्षम नहीं था सीएन सी ++ "और पहले तीन पृष्ठों को देख रहे हैं।

मैं स्टैक ओवरफ़्लो पर बहुत नया हूं, तो अगर मुझे इस प्रश्न के साथ किसी नियम या आचरण संहिता का उल्लंघन किया गया है तो मुझे क्षमा करें। मैं learncpp.com पर सी ++ सीख रहा हूं और इस page के प्रश्न 2 का उत्तर देने के लिए अपना कोड लिख रहा हूं।

अपडेट: मुझे लगता है कि मेरे प्रोग्राम को सत्यापित करने के लिए कोई कारण नहीं है कि कोई char दर्ज किया गया है या नहीं। हालांकि, मुझे लगता है कि शायद मैं यह जानकर बहुत उत्सुक था कि मैंने इस बारे में बहुत कुछ नहीं सोचा था कि यह वास्तव में कार्यक्रम के लिए आवश्यक था या नहीं।

उत्तर

1

std::cin.fail(); सत्य वापस आ जाएगा अगर अंतर्निहित धारा डेटा पढ़ने या लिखने में विफल रही। आपके द्वारा प्रदान किए गए एन्कोडिंग के साथ इसका कोई लेना-देना नहीं है।

यह भी उल्लेखनीय है कि char वास्तव में utf-8 या ASCII के बारे में अवगत नहीं है, यह केवल एक बाइट है। न तो C++ धाराएं डेटा के एन्कोडिंग को मान्य करती हैं।

तो इस मामले में, Ž (और अन्य) std::cin के लिए एक वैध इनपुट है।

आप ASCII केवल पात्रों को मान्य करने के लिए चाहते हैं, तो आप यह अपने आप को क्या करने की जरूरत:

std::cin >> c; 
if (c != 'y' && c != 'n') { /*handle invalid input*/ } 
+0

सादा 'char':

std::cin >> c; if (c < 0 || c > 127) { /*handle non ASCII chars*/ } 

आपके मामले में, आप y या n सामने सत्यापित करने की जरूरत है आम सिस्टम –

+0

@MM पर 127 से अधिक कभी नहीं होगा यदि 'char' वास्तव में हस्ताक्षरित है तो क्या होगा? –

+0

क्या होगा यदि यह नहीं है? ओपी ने कहा एमएसवीसी ++ 2015. –

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

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