मेरे पास नीचे एक फ़ंक्शन है जो यह जांचना है कि सरणी में एक निश्चित स्थिति में एक्स या ओ अक्षर है या नहीं। मैंने इसे इसलिए बनाया है कि यदि उस तत्व में X या O मौजूद नहीं है तो वह उस तत्व में X या O डाल देगा। लेकिन किसी कारण से यह काम नहीं कर रहा है। यदि कहें कि एक्स तत्व में है और इसे ओ में डालने की बारी है तो बस ओ डालता है और मुझे यह नहीं बताता कि चाल पहले ही हो चुकी थी।

हो सकता है कि मैंने यहाँ अपना डिज़ाइन गड़बड़ कर दिया हो?

void makeMove()
{
    if ( choosePositionX )
    {
        if (ticTacBoard[choosePositionX - 1] != 'X' || ticTacBoard[choosePositionX - 1] != 'O' )
        {
            ticTacBoard[choosePositionX - 1] = 'X';
        }
        else
            cout << "Player O has already made this move" << endl << endl;
    }


    if ( choosePositionO )
    {
        if (ticTacBoard[choosePositionO - 1] != 'X' || ticTacBoard[choosePositionO - 1] != 'O' )
        {
            ticTacBoard[choosePositionO - 1] = 'O';
        }
        else
            cout << "Player X has already made this move" << endl << endl;
    }
}
0
soniccool 8 नवम्बर 2011, 08:49
मुझे लगता है कि मैंने वास्तव में इसे ठीक कर दिया है मुझे जांचने दें
 – 
soniccool
8 नवम्बर 2011, 08:58

2 जवाब

सबसे बढ़िया उत्तर

क्या यह || . के बजाय && नहीं होना चाहिए

क्योंकि इस मामले में, अगर शर्त हमेशा सच हो जाएगी।

यदि आप चाहते हैं कि दोनों शर्तें सत्य हों, तो '&&' का उपयोग करें, लेकिन मुझे लगता है कि आप OR को शाब्दिक अर्थ में ले जा रहे हैं, यदि आप चाहते हैं कि दी गई शर्तों में से केवल एक ही सत्य होना चाहिए, तो निम्न अभिव्यक्ति का उपयोग करें

यदि आप प्राप्त करना चाहते हैं, दोनों में से कोई एक शर्त सत्य है, तो मूल रूप से आप एक्सओआर ऑपरेशन की कोशिश कर रहे हैं, जिसे इस तरह हासिल किया जा सकता है

if ((ticTacBoard[choosePositionX - 1] != 'X'  ||  ticTacBoard[choosePositionX - 1] != 'O' )
  && ! (ticTacBoard[choosePositionX - 1] != 'X'  &&  ticTacBoard[choosePositionX - 1] != 'O' ))

उपरोक्त शर्त यह सुनिश्चित करेगी कि उनमें से केवल एक ही सत्य है। either एक्स या ओ

स्थिति का परीक्षण नहीं किया है, किसी भी बग को क्षमा करें, यह एक विचार है

3
Zohaib 8 नवम्बर 2011, 09:11
मैंने सोचा || मतलब या मतलब अगर या तो एक्स या ओ दोनों नहीं हैं?
 – 
soniccool
8 नवम्बर 2011, 08:53
|| अर्थात, यदि उनमें से कोई एक सत्य है, तो वह सत्य लौटेगा। क्या आप यही चाहते हैं ?
 – 
Zohaib
8 नवम्बर 2011, 08:57
मैं इसे इसलिए चाहता हूं यदि या तो एक्स या ओ उसे वापस करने के लिए वहां है। क्योंकि तत्व में या तो X होगा या O
 – 
soniccool
8 नवम्बर 2011, 09:05
यदि आप चाहते हैं कि इनमें से कोई एक शर्त सही हो, तो कृपया उपरोक्त संपादित उत्तर देखें
 – 
Zohaib
8 नवम्बर 2011, 09:06

इसका जो भी मूल्य है, वह हमेशा या तो एक्स नहीं होगा या ओ नहीं होगा। आप जांचते हैं कि यह एक्स नहीं है या नहीं-ओ। वह परीक्षा हमेशा सत्य होगी।

आप जांचना चाहते हैं कि यह है X या है O. उस स्थिति में, कदम पहले ही उठाया जा चुका है। परिवर्तन:

    if (ticTacBoard[choosePositionX - 1] != 'X' || ticTacBoard[choosePositionX - 1] != 'O' )
    {
        ticTacBoard[choosePositionX - 1] = 'X';
    }
    else
        cout << "Player O has already made this move" << endl << endl;

प्रति

    if (ticTacBoard[choosePositionX - 1] != 'X' && ticTacBoard[choosePositionX - 1] != 'O' )
    {
        ticTacBoard[choosePositionX - 1] = 'X';
    }
    else
        cout << "Player " << ticTacBoard[choosePositionX - 1] << " has already made this move" << endl << endl;

यदि खिलाड़ी ने सफलतापूर्वक चाल चली है, तो आपको यह बदलने की आवश्यकता है कि कौन सा खिलाड़ी आगे जाता है। यदि नहीं, तो आपको उसी खिलाड़ी को फिर से प्रयास करने देना होगा।

0
David Schwartz 8 नवम्बर 2011, 08:58
यह आपकी पहली और सबसे बड़ी गलती है, बिल्कुल। स्पष्ट रूप से, जो भी मान है, वह हमेशा X नहीं होगा या O नहीं होगा। तो आपका 'if' हमेशा सत्य होता है।
 – 
David Schwartz
8 नवम्बर 2011, 11:11