[問題] 判斷式疑問

看板C_and_CPP (C/C++)作者 (coal)時間13年前 (2013/02/11 12:43), 編輯推噓0(0010)
留言10則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) DEV C++ 問題(Question): 判斷式得結果和預期不符 餵入的資料(Input): mit dartmouth 程式碼: // 以下為初使值 //nInf= 十進位輸出 16777215; nNodeCnt = 0; aIdHash[0~25] = {nInf}; for (string strName; cin >> strName;) { ... nF = (aIdHash[nF] = (aIdHash[nF] == nInf) ? nNodeCnt++ : aIdHash[nF]); cout<<"nF: "<<nF <<" aIdHash[nF]: "<<aIdHash[nF]<<" nNodeCnt: "<<nNodeCnt<<endl; nL = (aIdHash[nL] = (aIdHash[nL] == nInf) ? nNodeCnt++ : aIdHash[nL]); cout<<"nL: "<<nL <<" aIdHash[nL]: "<<aIdHash[nL]<<" nNodeCnt: "<<nNodeCnt<<endl; ... } 如輸入 mit 會顯示 nF: 0 aIdHash[nF]: 16777215 nNodeCnt: 1 nF: 1 aIdHash[nF]: 16777215 nNodeCnt: 2 按照我的理解 A = B = C , AB會被C的值蓋掉 回到程式碼 nNodeCnt 做完才會++... 所以大家都應該被洗成 0 做完要輸出的時候 nNodeCnt 自己++ 所以預期結果 三個數值應該是 0,0,1... 為什麼 aIdHash[nF] 沒有被洗成 0 呢? 完整程式碼: http://pastie.org/6114254 補充說明: uva online judge 117 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.230.50.156 ※ 編輯: coal511464 來自: 36.230.50.156 (02/11 12:44) ※ 編輯: coal511464 來自: 36.230.50.156 (02/11 12:44)

02/11 19:14, , 1F
改成 nF = aIdHash[nF] = ((aIdHash[nF] == nInf)? ...)
02/11 19:14, 1F

02/11 21:27, , 2F
aIdHash[nF] = (aIdHash[nF] == nInf) 先做了, 改成樓上
02/11 21:27, 2F

02/12 11:58, , 3F
樓上大說的先做 括號內不是0或1嗎 為什麼仍是16777215
02/12 11:58, 3F

02/12 12:07, , 4F
我改成1樓大的 結果還是一樣@@ 我用MinGW GCC 4.7.0
02/12 12:07, 4F

02/12 13:25, , 5F
nF 被改了,aIdHash[nF] 取到的值當然不一樣。
02/12 13:25, 5F

02/12 13:30, , 6F
你可以用個 reference 變數記下 aIdHash[nF] 再來算。
02/12 13:30, 6F

02/12 16:09, , 7F
歐 對爺 做完nF的值改了 在顯示出來也會不一樣...
02/12 16:09, 7F

02/12 18:22, , 8F
剛用線上編譯和執行, 沒有先做, 但1樓的寫法較清楚
02/12 18:22, 8F

02/12 23:21, , 9F
?:跟=的operator precedence同等級 右往左
02/12 23:21, 9F

02/14 14:11, , 10F
THANKS
02/14 14:11, 10F
文章代碼(AID): #1H67RUvU (C_and_CPP)
文章代碼(AID): #1H67RUvU (C_and_CPP)