मैं Bjarne Stroustrup की प्रोग्रामिंग के माध्यम से काम कर रहा हूँ - सिद्धांत और व्यवहार सी ++ का उपयोग करना और निम्न उदाहरण के लिए आया था:सी ++ में cin एक int चर को स्ट्रिंग मान असाइन करने का प्रयास कर रहा है?
#include "std_lib_facilities.h"
int main() {
/* Name and Age input */
cout << "Please enter your first name and age\n";
string first_name = "???";
int age = -1.0;
cin >> first_name >> age;
cout << "Hello," << first_name << "(age " << (age * 12) << " months)\n";
return 0;
}
आप कार्यक्रम और इनपुट कार्लोस 22 चलाते हैं, तो इसे सही ढंग से उत्पादन Hello, Carlos (age 22)
होगा। हालांकि, अगर आप 22 कार्लोस में डालते हैं, तो वह कहता है कि आउटपुट Hello, 22 (age -1)
होना चाहिए क्योंकि "कार्लोस एक पूर्णांक नहीं है ... इसे पढ़ा नहीं जाएगा"। हालांकि, जब मैं इसे चलाता हूं, तो यह Hello, 22 (age 0)
देता है जो ऐसा लगता है कि यह कचरा मूल्य असाइन कर रहा है। मैं उत्सुक हूं कि यह क्यों हो रहा है, क्योंकि पुस्तक का तात्पर्य है कि जब तक आप एक पूर्णांक इनपुट नहीं करते हैं, तो यह age
चर पर कुछ भी असाइन करने का प्रयास नहीं करेगा। मैंने ब्रेकपॉइंट्स के साथ कोड चलाया और गैर-पूर्णांक इनपुट दर्ज होने के बाद -1 से 0 में age
के मानों की पुष्टि की।
क्या मैं कुछ गलत कर रहा हूं? या क्या यह एक विषमता है क्योंकि मैं इसे एक्सकोड के माध्यम से बना रहा हूं और जो भी संकलक उसमें शामिल है?
यह एक 'अपरिभाषित व्यवहार' है जिसे आप प्राप्त कर रहे हैं। ऐसे मामलों में आउटपुट कुछ भी हो सकता है –
सी ++ 11 आगे निकलने पर स्केलर प्रकार 0 पर सेट हो जाएंगे, सी ++ 11 से पहले मूल्य छूटा नहीं गया था। – user657267
@ user657267, आह, इसके लिए धन्यवाद। मैं उलझन में था क्योंकि यह सी ++ 11 के लिए पुस्तक का अद्यतन संस्करण था, लेकिन आपकी टिप्पणी पढ़ने के बाद, मैंने इरेटा देखा और पर्याप्त यकीन है, इसके बारे में एक नोट था। धन्यवाद! – Dan