作者ledia (下班後才下棋)
看板C_and_CPP
標題Re: [問題] Boolean Trea Evaluation
時間Sat Nov 14 09:33:32 2009
推文說的有問題的地方還沒改
是這一段:
※ 引述《BlackMatrix (BlackMatrix)》之銘言:
: int left = eval (r->left);
: int right = eval (r->right);
在這邊就先 eval r->left 和 r->right 是有風險的
因為好死不死 r->element 是 '~' 的話
int left = eval(r->left); 就掛了
(因為 r->element 是 '~' 時, 他的資料是放 right, left 沒有東西)
解決方式很多, 其中之一就是先判定 element 是什麼
再去處理接下來的 eval 和算出 return value
比如說:
switch(r->element)
{
case '&':
left = eval(left);
right = eval(right);
ret_value = left && right;
break;
case '|':
left = eval(left);
right = eval(right);
ret_value = left || right;
break;
case '~':
// 這裡 left 沒存資料, 不能 eval(left);
right = eval(right);
ret_value = ! right;
break;
default:
break;
}
return ret_value;
: char op = r->element;
: if (op == '&')
: {
: return(left*right);
: //if it's true, then it gives me 1, if it's false, then it gives me 0
: }
: else if (op == '|')
: {
: if ((right == 1) ||(left == 1))
: {
: return 1;
: }
: else if ((right == 0) || (left == 0))
: {
: return 0;
: }
: }
: else if (op == '~')
: {
: if (right == 1)
: return 0;
: else if (right == 0)
: return 1;
: //改掉了, 因為只有right有東西
: }
: }
--
有時候,遺忘,是令人快樂的。什麼時候?當然是有人傷了你的心的時候。
存心傷你的那個人,固然是故意和你過不去,但是被傷了心而耿耿於懷的你
,卻是和自己過不去了。所以,記性不好的人,通常會是比較快樂的人,也
是比較不容易被擊倒的人。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.50
※ 編輯: ledia 來自: 140.112.30.50 (11/14 09:34)
推 BlackMatrix:原來是這樣, 我終於做出來了~~~~太感謝了~~~ 11/14 10:44
→ BlackMatrix:謝謝 11/14 10:44