看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) onlineGDB 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 印出問題 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) #include <stdio.h> int main() { int n = 0; if(n = 0) n=1; else if(n=1) n=2; else if(n=2) n=3; else if(n=3) n=4; printf("n = %d", n); return 0; } 補充說明(Supplement): 照著課本上的題目寫 課本答案輸出為 1 但是測試後輸出為2 請教另一位中央資工所同學也表示很納悶 他也認為答案是1 跪求版上碼農大大開示 還是課本答案錯了? (標題不太清楚怎麼描述比較好) -- 帥這個字很討厭 可是他跟了我一輩子 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.166.79.179 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1612456391.A.B9F.html
Schottky: 你是不是把 if 判斷式裡面的 == 寫成 = 了 02/05 00:38
題目故意這樣的
nh60211as: 中央資工所== 02/05 00:44
Schottky: 請把課本題目拍給我們參詳參詳 02/05 00:56
https://imgur.com/a/WvLlzXK 若 void main(void) 改成 int main() 會有影響嗎?
poolongkong: = 是 assign,== 才是判斷左右兩邊是否相等 02/05 01:06
poolongkong: 說不定你同學以為你打錯,自動把 = 轉成 == 了 XD 02/05 01:08
※ 編輯: ooww (218.166.79.179 臺灣), 02/05/2021 01:41:21
Schottky: 嗯嗯,這是課本印錯,但與其說是答案錯不如說題目印錯 02/05 01:41
Schottky: 就是 == 印錯變成 = 的問題,請向老師反應 02/05 01:42
Schottky: 這個問題和 main() 的傳回值是 int 或 void 完全無關 02/05 01:43
感謝 弱弱問一下 if(n == 0) n=1; else if(n==1) n=2; else if(n==2) n=3; else if(n==3) n=4; 最後印出n = 1 是因為跑完這行if(n == 0) n=1; 以下就直接跳過嗎? ※ 編輯: ooww (218.166.79.179 臺灣), 02/05/2021 01:49:17
Schottky: 是的,正解 02/05 01:50
感謝大大
loveme00835: 你可以試試加上選項 -Wall -Werror -pedantic-errors 02/05 01:51
loveme00835: 連編譯都不會過的東西就不用看了 02/05 01:52
https://imgur.com/a/9n7wcLI 請問哪裡可以加? ※ 編輯: ooww (218.166.79.179 臺灣), 02/05/2021 02:03:51
loveme00835: 你那個網站沒地方加有點爛, 一般社群分享程式碼都是 02/05 02:10
loveme00835: 用 Compiler Explorer https://godbolt.org/z/n66zcT 02/05 02:11
loveme00835: 各製化選項較多, 如可用比較熱門的函式庫 02/05 02:12
loveme00835: -Wall -Werror 開下去如果沒辦法編過表示程式碼有缺 02/05 02:13
loveme00835: 陷 (defect), 即使你關選項忽略它遲早也是要還的 02/05 02:14
感謝愛我大大 ※ 編輯: ooww (122.121.82.80 臺灣), 02/05/2021 02:18:37
GTR12534: assignment 的回傳值 02/07 00:30
GTR12534: bit.ly/assignment-value 02/07 00:32
kaneson: 題目寫=是故意的,寫==是考小學生 02/09 10:01
kaneson: 因為c是少數assign statement仍可取值不會報錯的語言. 02/09 10:14
kaneson: 所以這也是一個找bug的要注意的點。我是覺得課本答案錯 02/09 10:14
kaneson: 了 02/09 10:14
感謝k大大
Lipraxde: 印象中看過有一種 coding style 是把 condition 的式子 02/09 10:19
Lipraxde: 倒過來,例如變成:1 == n。 02/09 10:19
感謝L大大 ※ 編輯: ooww (122.121.89.109 臺灣), 02/09/2021 12:34:07
asdfdsa1024: 看起來是因為第一個if 是賦值0所以判斷式為false 不 02/10 19:29
asdfdsa1024: 會進入第一個if 第二個else if 賦值1所以會進入 因此 02/10 19:29
asdfdsa1024: n=2 02/10 19:29
感謝a大大 ※ 編輯: ooww (1.173.74.242 臺灣), 02/11/2021 00:19:18