c - scanf() resetting first result depending of variable declaration order -
यह अपेक्षित रूप से काम क्यों नहीं करता?
int main () {अहस्ताक्षरित चार लाउज़ , पीटर; Printf ("लुईस की आयु:"); स्कैनफ़ ("% u", और लुईस); Printf ("पीटर की आयु:"); स्कैनफ़ ("% u", और पीटर); Printf ("लुईस:% यू \ n", लुईस); Printf ("पीटर:% u \ n", पीटर); वापसी 0; }
आउटपुट:
लुईस की आयु: 12 पीटर की आयु: 13 लुईस: 0 पीटर: 13
लेकिन अगर मैं वेरिएबल घोषणाओं को स्वैप करता हूं तो यह काम करता है:
अहस्ताक्षरित चार पटर, लुईस;
आउटपुट:
लुईस की आयु: 12 पीटर की आयु: 13 लुईस: 12 पीटर: 13
मैंने यह भी गौर किया है कि int
या अहस्ताक्षरित int
का उपयोग करके वेरिएड को स्वैप करने की आवश्यकता नहीं है, लेकिन char
नहीं करता है।
प्रिंटफ़ ("% u", लुईस) डालने की कोशिश की है;
बस के बाद scanf ()
लाउज़ के लिए और मान सही ढंग से सहेजा जाता है और अगर मैं दूसरा scanf ()
टिप्पणी देता हूं तो यह ठीक काम करता है ... विंडोज (डीसीपीपी) और लिनक्स (केराइट + मेक) पर "समस्या" शो। क्या यह कंपाइलर का एक बग है, या मेरा?
यह आपका बग है, आपके वेरिएबल प्रकार के थे अहस्ताक्षरित चार
जो 1 बाइट है, हालांकि, आपने 12 में प्रवेश किया है जो 4 बाइट्स (एक अहस्ताक्षरित पूर्णांक) है, जिसने एक ओवरफ्लो (संकलक / रनटाइम द्वारा परिभाषित कार्यान्वयन) का कारण बना है, और वह इसे समझा जाएगा स्मृति में अगले चर आपने % u
विनिर्देशक का उपयोग printf
के लिए किया है जो एक अहस्ताक्षरित int
, एक अहस्ताक्षरित चार
चर के लिए, जो कि गलत है और मैच नहीं है यह बताता है, जैसा कि आपने खुद को खोजा है, कि एक अहस्ताक्षरित int
या int
का उपयोग करके काम करता है, क्योंकि इनपुट के मूल्यों को रखने के लिए पर्याप्त जगह थी।
उम्मीद है कि यह मदद करता है, बेस्ट कोर्ड्स, टॉम।
Comments
Post a Comment