Re: [問題] Boolean Trea Evaluation

看板C_and_CPP作者 (下班後才下棋)時間16年前 (2009/11/14 09:33), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
推文說的有問題的地方還沒改 是這一段: ※ 引述《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)

11/14 10:44, , 1F
原來是這樣, 我終於做出來了~~~~太感謝了~~~
11/14 10:44, 1F

11/14 10:44, , 2F
謝謝
11/14 10:44, 2F
文章代碼(AID): #1A_WZk35 (C_and_CPP)
文章代碼(AID): #1A_WZk35 (C_and_CPP)