2013-05-10 13 views
5
int a = 1, b = 0; 

if(a, b) 
    printf("success\n"); 
else 
    printf("fail\n"); 

if(b, a) 
    printf("success\n"); 
else 
    printf("fail"); 

यह एक cpp फ़ाइल है और मैंअल्पविराम ऑपरेटर अगर हालत

fail 
success 

के रूप में दृश्य स्टूडियो 2010 में उत्पादन मिला क्यों इस व्यवहार? क्या आप कृपया समझा सकते हैं?

+6

तुम्हें पता है कि यह हालत में अल्पविराम ऑपरेटर उपयोग कर रहा है, फिर भी आप से पूछना चाहता है? –

+0

आप पहले स्टेटमेंट पर ब्रेकपॉइंट जोड़ सकते हैं और प्रवाह को देखने के लिए F10 का उपयोग कर लाइन द्वारा प्रोग्राम लाइन निष्पादित कर सकते हैं। – vish213

+0

@DanielFischer मुझे पता है कि अल्पविराम बयान में अनुक्रम बिंदु के रूप में कार्य करता है लेकिन कार्यों के तर्कों में नहीं। क्या आप मुझे बता सकते हैं कि यह 'if' के अंदर अनुक्रम बिंदु है या नहीं? मैं सहजता से ** हाँ ** महसूस करता हूं, लेकिन मैं आपको पसंद करूंगा पुष्टि करने के लिए। –

उत्तर

35

http://en.wikipedia.org/wiki/Comma_operator:

C और C++ प्रोग्रामिंग भाषाओं में, अल्पविराम ऑपरेटर (टोकन , द्वारा प्रतिनिधित्व) एक द्विआधारी ऑपरेटर कि अपनी पहले संकार्य मूल्यांकन करता है और परिणाम को छोड़ देता है, और फिर मूल्यांकन करता है दूसरा ऑपरेंड और यह मान (और प्रकार) देता है।

अपना पहला if में:

if (a, b) 

a पहले मूल्यांकन किया है और खारिज कर दिया है, b दूसरे का मूल्यांकन किया और इसलिए इस हालत झूठी है 0. के रूप में दिया जाता है।

अपने दूसरे if में:

if (b, a) 

b पहले मूल्यांकन किया है और खारिज कर दिया है, a दूसरे का मूल्यांकन किया और इसलिए इस हालत सच है के रूप में 1. दिया जाता है।

यदि दो से अधिक ऑपरेंड हैं, तो अंतिम अभिव्यक्ति वापस कर दी जाएगी।

आप दोनों स्थितियों सच होना चाहते हैं, आप का उपयोग करना चाहिए && operator:

if (a && b) 
+0

तो ऐसी परिस्थितियों को करने का क्या मतलब है? क्या कोई बेहतर और उपयोगी उदाहरण प्रदान कर सकता है – Pars

+1

@Pars यह उपयोगी है अगर आप एक ऐसा ऑपरेशन करना चाहते हैं जो साइड इफेक्ट्स का कारण बनता है, लेकिन वास्तविक रिटर्न वैल्यू की आवश्यकता नहीं है। उदाहरण के लिए, मेरे पास मेरी परियोजनाओं में से एक में यह स्थिति थी: 'अगर (numeric_read (str, और err),! Err) '। अगर मैंने ',! त्रुटि 'के बजाय' &&! Err' का उपयोग किया होता, तो मैं 0 को पढ़ने वाली संख्याओं को पढ़ने में सक्षम नहीं होता। –

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