0
我在我的代碼中有一個不尋常的錯誤,有時,我的代碼將返回錯誤的值。我有一個可能是罪魁禍首的函數中的三元表達式,它是這樣寫的;三元運算符優先級和賦值
corpusBoard[i][j] = (piece == 'o') ? 'o' : 'x';
哪個應當說明,如果piece
等於 '0',然後分配的 'o' 到corpusBoard[i][j]
,否則分配 'x' 至corpusBoard[i][j]
。
這兩個陳述是否相同?如果不是,爲什麼?
corpusBoard[i][j] = (piece == 'o') ? 'o' : 'x';
corpusBoard[i][j] = ((piece == 'o') ? 'o' : 'x');
編輯:
時遇到的具體問題是一個項目,我的工作,在系統檢查各種火柴的數據庫,然後實例玩家件字符數據庫。由於片可以是「O」或「X」,我想「翻轉」他們在做數據庫模式匹配時,一個簡單的辦法:
std::vector<std::vector<char>> Machine::matchCorpus(std::vector<std::vector<char>> corpusBoard)
{
for(int i = 0; i < corpusBoard.size(); i++){
for(int j = 0; j < corpusBoard[0].size(); j++){
if(corpusBoard[i][j] == 'M'){
corpusBoard[i][j] = ((piece == 'o') ? 'x' : 'o');
}
if(corpusBoard[i][j] == 'H'){
corpusBoard[i][j] = ((piece == 'o') ? 'o' : 'x');
}
}
}
return corpusBoard;
}
不幸的是,在極少數情況下,它會返回錯誤的值,即使如果片是'o',並且corpusBoard[i][j] == 'H'
,它應該始終將corpusBoard[i][j]
分配給'o',但很少,它被賦予'x'。
什麼類型是件? – donjuedo
@ donjuedo:這是一個字符。 –
從字面上看,你的問題只是關於等同性。但是你的bug聽起來很有趣。小心把你的項目減少到最低限度的例子? – donjuedo