मेरे पास नीचे एक फ़ंक्शन है जो यह जांचना है कि सरणी में एक निश्चित स्थिति में एक्स या ओ अक्षर है या नहीं। मैंने इसे इसलिए बनाया है कि यदि उस तत्व में 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;
}
}
2 जवाब
क्या यह || . के बजाय && नहीं होना चाहिए
क्योंकि इस मामले में, अगर शर्त हमेशा सच हो जाएगी।
यदि आप चाहते हैं कि दोनों शर्तें सत्य हों, तो '&&' का उपयोग करें, लेकिन मुझे लगता है कि आप OR को शाब्दिक अर्थ में ले जा रहे हैं, यदि आप चाहते हैं कि दी गई शर्तों में से केवल एक ही सत्य होना चाहिए, तो निम्न अभिव्यक्ति का उपयोग करें
यदि आप प्राप्त करना चाहते हैं, दोनों में से कोई एक शर्त सत्य है, तो मूल रूप से आप एक्सओआर ऑपरेशन की कोशिश कर रहे हैं, जिसे इस तरह हासिल किया जा सकता है
if ((ticTacBoard[choosePositionX - 1] != 'X' || ticTacBoard[choosePositionX - 1] != 'O' )
&& ! (ticTacBoard[choosePositionX - 1] != 'X' && ticTacBoard[choosePositionX - 1] != 'O' ))
उपरोक्त शर्त यह सुनिश्चित करेगी कि उनमें से केवल एक ही सत्य है। either
एक्स या ओ
स्थिति का परीक्षण नहीं किया है, किसी भी बग को क्षमा करें, यह एक विचार है
इसका जो भी मूल्य है, वह हमेशा या तो एक्स नहीं होगा या ओ नहीं होगा। आप जांचते हैं कि यह एक्स नहीं है या नहीं-ओ। वह परीक्षा हमेशा सत्य होगी।
आप जांचना चाहते हैं कि यह है 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;
यदि खिलाड़ी ने सफलतापूर्वक चाल चली है, तो आपको यह बदलने की आवश्यकता है कि कौन सा खिलाड़ी आगे जाता है। यदि नहीं, तो आपको उसी खिलाड़ी को फिर से प्रयास करने देना होगा।
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।