[問題] 印出什麼

看板C_and_CPP (C/C++)作者 (選ばれし子どもたち)時間4年前 (2021/02/05 00:33), 4年前編輯推噓9(9018)
留言27則, 8人參與, 最新討論串1/1
開發平台(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

02/05 00:38, 4年前 , 1F
你是不是把 if 判斷式裡面的 == 寫成 = 了
02/05 00:38, 1F
題目故意這樣的

02/05 00:44, 4年前 , 2F
中央資工所==
02/05 00:44, 2F

02/05 00:56, 4年前 , 3F
請把課本題目拍給我們參詳參詳
02/05 00:56, 3F
https://imgur.com/a/WvLlzXK 若 void main(void) 改成 int main() 會有影響嗎?

02/05 01:06, 4年前 , 4F
= 是 assign,== 才是判斷左右兩邊是否相等
02/05 01:06, 4F

02/05 01:08, 4年前 , 5F
說不定你同學以為你打錯,自動把 = 轉成 == 了 XD
02/05 01:08, 5F
※ 編輯: ooww (218.166.79.179 臺灣), 02/05/2021 01:41:21

02/05 01:41, 4年前 , 6F
嗯嗯,這是課本印錯,但與其說是答案錯不如說題目印錯
02/05 01:41, 6F

02/05 01:42, 4年前 , 7F
就是 == 印錯變成 = 的問題,請向老師反應
02/05 01:42, 7F

02/05 01:43, 4年前 , 8F
這個問題和 main() 的傳回值是 int 或 void 完全無關
02/05 01:43, 8F
感謝 弱弱問一下 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

02/05 01:50, 4年前 , 9F
是的,正解
02/05 01:50, 9F
感謝大大

02/05 01:51, 4年前 , 10F
你可以試試加上選項 -Wall -Werror -pedantic-errors
02/05 01:51, 10F

02/05 01:52, 4年前 , 11F
連編譯都不會過的東西就不用看了
02/05 01:52, 11F
https://imgur.com/a/9n7wcLI 請問哪裡可以加? ※ 編輯: ooww (218.166.79.179 臺灣), 02/05/2021 02:03:51

02/05 02:10, 4年前 , 12F
你那個網站沒地方加有點爛, 一般社群分享程式碼都是
02/05 02:10, 12F

02/05 02:11, 4年前 , 13F
用 Compiler Explorer https://godbolt.org/z/n66zcT
02/05 02:11, 13F

02/05 02:12, 4年前 , 14F
各製化選項較多, 如可用比較熱門的函式庫
02/05 02:12, 14F

02/05 02:13, 4年前 , 15F
-Wall -Werror 開下去如果沒辦法編過表示程式碼有缺
02/05 02:13, 15F

02/05 02:14, 4年前 , 16F
陷 (defect), 即使你關選項忽略它遲早也是要還的
02/05 02:14, 16F
感謝愛我大大 ※ 編輯: ooww (122.121.82.80 臺灣), 02/05/2021 02:18:37

02/07 00:30, 4年前 , 17F
assignment 的回傳值
02/07 00:30, 17F

02/07 00:32, 4年前 , 18F
bit.ly/assignment-value
02/07 00:32, 18F

02/09 10:01, , 19F
題目寫=是故意的,寫==是考小學生
02/09 10:01, 19F

02/09 10:14, , 20F
因為c是少數assign statement仍可取值不會報錯的語言.
02/09 10:14, 20F

02/09 10:14, , 21F
所以這也是一個找bug的要注意的點。我是覺得課本答案錯
02/09 10:14, 21F

02/09 10:14, , 22F
02/09 10:14, 22F
感謝k大大

02/09 10:19, , 23F
印象中看過有一種 coding style 是把 condition 的式子
02/09 10:19, 23F

02/09 10:19, , 24F
倒過來,例如變成:1 == n。
02/09 10:19, 24F
感謝L大大 ※ 編輯: ooww (122.121.89.109 臺灣), 02/09/2021 12:34:07

02/10 19:29, , 25F
看起來是因為第一個if 是賦值0所以判斷式為false 不
02/10 19:29, 25F

02/10 19:29, , 26F
會進入第一個if 第二個else if 賦值1所以會進入 因此
02/10 19:29, 26F

02/10 19:29, , 27F
n=2
02/10 19:29, 27F
感謝a大大 ※ 編輯: ooww (1.173.74.242 臺灣), 02/11/2021 00:19:18
文章代碼(AID): #1W7277kV (C_and_CPP)
文章代碼(AID): #1W7277kV (C_and_CPP)