क्या जब तुम >> पत्र CIN चर int करने के लिए क्या होगा? मैंने 2 int संख्याओं को जोड़ने के लिए सरल कोड की कोशिश की, उन्हें पहले जोड़ने के बजाय उन्हें पढ़ें। लेकिन जब मैं पत्र दर्ज करता हूं, तो यह स्क्रीन पर कई संख्याओं को विफल करता है और प्रिंट करता है। लेकिन इस त्रुटि का कारण क्या है? मेरा मतलब है, मुझे उम्मीद है कि वह उस पत्र के ASCII कोड को लोड और उपयोग करेगी।सी ++ चरित्र int करने के लिए
उत्तर
यदि आप स्पष्ट रूप से एक पूर्णांक के लिए अपने चार डाली, यह ASCII कोड है, तो आप अजीब परिणाम आप हो रही है पाने के लिए इस्तेमाल करेंगे, और यह अपने आप में डाली नहीं कर रहा है int करने के लिए।
आप int istream::get();
इस्तेमाल कर सकते हैं मुझे लगता है आप इस तरह कोड है:
int n;
while (someCondition) {
std::cin >> n;
.....
std::cout << someOutput;
}
जब आप कुछ है कि एक पूर्णांक, धारा (std :: CIN) के रूप में पढ़ा नहीं जा सकता दर्ज एक असफल प्रवेश करती है राज्य और इनपुट पर निम्नलिखित सभी प्रयास विफल रहते हैं जब तक आप इनपुट त्रुटि से निपट नहीं पाते हैं।
आपके पास कोई इनपुट ऑपरेशन की सफलता का परीक्षण कर सकते हैं:
if (!(std::cin >> n)) //failed to read int
और आप (इनपुट कि इनपुट विफलता का कारण बना) एक अच्छी स्थिति के लिए धारा को बहाल करने और असंसाधित पात्रों त्यागने कर सकते हैं:
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
एक और संभावना एक स्ट्रिंग चर (जो शायद ही कभी विफल हो जाती है) में इनपुट स्वीकार करना है और स्ट्रिंग को int में परिवर्तित करने का प्रयास करें।
इस इनपुट के साथ एक बहुत ही आम समस्या है और धागे की टन यहाँ और कहीं और इसके बारे में नहीं होना चाहिए।
धन्यवाद, इसलिए यदि मुझे यह सही लगता है, तो स्टडआउट वास्तव में प्रोग्राम में ASCII कोड भेजता है, लेकिन std :: cin यह पहचानता है कि यह किस प्रकार है और इसका उपयोग इस तरह करें। – Vit
यदि आप ** int ** चर में इनपुट की अपेक्षा करते हैं, तो "123" ठीक है लेकिन "xyz" इनपुट ऑपरेशन विफल हो जाता है। धारा इनपुट से वर्णों का सिर्फ एक अनुक्रम प्राप्त करती है, लेकिन यह आपके द्वारा अनुरोधित प्रकार के रूपांतरणों को निष्पादित करती है, और ऐसा करने में असफलताओं को इंगित करती है जिससे आप परीक्षण कर सकते हैं और परीक्षण कर सकते हैं। – visitor
समस्या यह है कि जब आप एक पूर्णांक चर में पढ़ते हैं, तो C++ धाराओं का उपयोग करते हुए, इनपुट विधि उन वर्णों की अपेक्षा करती है जो '+', '-', '0' ... '9' '। कोई भी वर्ण जो इस सेट में नहीं है इनपुट को समाप्त करता है और इन वर्णों से एक संख्या बनाई गई है।
एक चरित्र की ASCII मूल्य पाने के लिए आपको एक char
चर में डेटा इनपुट की जरूरत है। आंतरिक रूप से, इसमें एएससीआईआई मूल्य है (कार्यक्रम को 16-बिट वर्ण या ईबीसीडीआईसी पढ़ने में नहीं दिया गया है)। यदि आप ASCII मान देखना चाहते हैं, तो आपको char
चर को एक पूर्णांक के रूप में आउटपुट करने की आवश्यकता होगी (आमतौर पर आउटपुट से पहले कास्ट की आवश्यकता होती है)।
तो एक पूर्णांक पढ़ने में विफल रहता है, अपने कार्यक्रम उपयोगकर्ता इनपुट गलत थी सूचित करने के लिए की जरूरत है। प्रोग्राम इनपुट डेटा को संसाधित करने से पहले प्रोग्राम को फिर से संख्या इनपुट करने की आवश्यकता हो सकती है।
जब आप की तरह कुछ कर रहे हैं:
int x;
cin >> x;
आप सी को निर्देश रहे ++ कीबोर्ड से एक int
पढ़ने के लिए अपेक्षा करनी चाहिए। असल में, जब आप कुछ int
दर्ज नहीं करते हैं, तो इनपुट स्ट्रीम (इस मामले में मानक इनपुट) इसकी त्रुटि स्थिति के कारण अनुपयोगी प्रस्तुत करता है।
है यही कारण है कि मैं व्यक्तिगत रूप से हमेशा स्ट्रिंग को पढ़ने के लिए पसंद करते हैं, और उन्हें संख्या में बदलने यदि आवश्यक हो तो। C++ मानक लाइब्रेरी के सी भाग में रूपांतरण फ़ंक्शन हैं जो इससे मदद कर सकते हैं।
double cnvtToNumber(const std::string &num)
{
char * ptr;
double toret = strtod(num.c_str(), &ptr);
if (*ptr != 0) { // If it got to the end of the string, then it is correct.
throw std::runtime_error("input was not a number");
}
return toret;
}
यहां आप एक संख्या को परिवर्तित कर रहे हैं, और यह पता लगा रहे हैं कि रूपांतरण सही था या नहीं।strtod(s)
केवल स्ट्रिंग, या एक स्पेस के अंत को ढूंढने पर ही रुक जाएगा।
std::string &trim(std::string &str)
{
// Remove trailing spaces
unsigned int pos = str.length() -1;
while(str[ pos ] == ' ') {
--pos;
}
if (pos < (str.length() -1)) {
str.erase(pos + 1);
}
// Remove spaces at the beginning
pos = 0;
while(str[ pos ] == ' ') {
++pos;
}
if (pos < 1) {
str.erase(0, pos);
}
return str;
}
अब आप सुरक्षित रूप कंसोल (या जो भी अन्य इनपुट स्ट्रीम) से पढ़ सकते हैं:: आदेश समारोह बेवकूफ बनाना रिक्त स्थान अनुगामी बचने के लिए, आप एक ट्रिम समारोह की जरूरत सकता है
int main()
{
std::string entry;
try {
std::getline(std::cin, entry);
int age = cnvtToNumber(trim(entry));
std::cout << age << std::endl;
} catch(const std::exception &e) {
std::cerr << e.what() << std::endl;
}
}
बेशक
आप कर सकते हैं यदि आप हमेशा double
पढ़ते हैं और फिर उन्हें परिवर्तित करते हैं तो सटीकता खो दें। यदि आप आगे की जांच करना चाहते हैं तो पूर्णांक (strtol(s)
) के लिए विशिष्ट कार्य हैं।
- 1. स्ट्रिंग के एनएच चरित्र int
- 2. सी में int के लिए एक हस्ताक्षरित int कैसे डालने या परिवर्तित करने के लिए?
- 3. टाइप करने के लिए int मैपिंग
- 4. सी - हस्ताक्षरित int सरणी रूपांतरण के लिए हस्ताक्षरित int
- 5. सूची <int> परिवर्तित करने के लिए int []
- 6. हास्केल int फ्लोट और चार फ्लोट करने के लिए int
- 7. चरित्र के साथ लूप के लिए उद्देश्य-सी NSStringAtIndex
- 8. कैसे एक String [] सी # और .NET 2.0 में [] int करने के लिए कन्वर्ट करने के लिए?
- 9. atoi() - स्ट्रिंग int करने के लिए
- 10. समस्याएं कास्टिंग नेन int करने के लिए
- 11. डब्ल्यूसीएफ - "अप्रत्याशित चरित्र 'सी'।
- 12. 'int' '' int 'से' int * 'को असाइन करने वाले पॉइंटर रूपांतरण के लिए असंगत पूर्णांक
- 13. एएनएसआई सी: क्यों चरित्र कार्य चार तर्क के बजाय int तर्क स्वीकार करते हैं?
- 14. लूप के लिए सी और सी ++ के लिए उपयोग किए गए हस्ताक्षर किए गए int की बजाय int क्यों है?
- 15. सी # - कंपाइलर त्रुटि - ऑब्जेक्ट को int [] असाइन करने के दौरान []
- 16. सी ++ - int मुख्य (int argc, char ** argv)
- 17. सी लंबे अहस्ताक्षरित int
- 18. सी # स्ट्रिंग [] int []
- 19. सी ++ int बनाम लंबे
- 20. सी ++ gamedev: int
- 21. सी ++: बड़े हस्ताक्षरित int
- 22. सी ++ में स्ट्रिंग के लिए आप int कैसे जोड़ते हैं?
- 23. JQuery: एचटीएमएल ascii चरित्र सम्मिलित करने के लिए कैसे पाठ?
- 24. पीएचपी समारोह प्राप्त करने के लिए चरित्र संख्या
- 25. पर्ल, करने के लिए एक चरित्र संलग्न i-वें समूह
- 26. सी # IntPtr int
- 27. सी # में, System.Int32 के लिए "int" उपनाम क्यों है?
- 28. सी ++ वेक्टर <int> के लिए डिफ़ॉल्ट तर्क?
- 29. सी ++ और printf - अजीब चरित्र उत्पादन
- 30. सी # टेक्स्ट फ़ाइल - ईओएफ चरित्र
क्या आप इस्तेमाल किए गए कोड को पोस्ट कर सकते हैं? –