遇到疑難雜症怎麼辦?
在學習程式語言或程式設計時,都會遇到許多奇怪問題,有些是程式碼本身,但有些卻是在操作工具時出問題。這時候就要拿出玩遊戲打怪物的精神,百折不撓多方找尋解答。
這是甚麼意思呢?對於一個新手,你我遇到的操作上問題,大部份也有先行的人會遇到過。首先,自己要釐清這不是程式碼問題。然後上網或到開發論壇尋找是否有相似的問題,並查看是否有解答。另外,現在有類似 ChatGPT AI,也可以詢問它。但是要注意的是解答不一定是正確,也不會是唯一解。
下面就列出一些我個人使用 Code Runner 延伸模組遇到的問題。
錯誤訊息 … … … undefined reference to `WinMain'
原因:編譯一個有 main()函式 的C語言程式,但卻收到此錯誤,很可能是這程式碼出了問題。檢查程式碼後,只能猜測原因是檔案修改但尚未儲存。
當執行到 C 程式碼的 scanf() 函式,程式不能繼續執行
原因:這是因為 Code Runner 原本設定,使scanf()函式輸出不在終端機 (Terminal),而在 輸出(OUTPUT) 。
C 程式 printf() 輸出中文字串,但終端機卻顯示亂碼
原因:VS Code 儲存程式檔案使用 UTF-8 ,但整合的終端機的編碼不是 UTF-8 ,而是 big-5 ,這兩者不一樣。
如何更改Code Runner 設定?
Ctrl + ,
開啟設定編輯器code runner terminal
Code-runner: Run In Terminal
code runner save
Code-runner: Save File Before Run
也可以參考第三天的文章 「VS Code 的設定」的 setting.json
修改範例。
這就順利解決前兩個問題。
另外,你是否有注意到,我在settings.json 檔案中添加"code-runner.ignoreSelection": true
,這是避免在工作區內產生暫存檔 tempCodeRunnerFile.c 。產生的原因是當選擇了程式碼片段的一部分,並且開始編譯建置,Code Runner 就會產生暫存檔。
終端機 cmd 的編碼是什麼?
cmd
啟動「命令提示字元」chcp
指令,它會顯示 Active code page:
950,這表示它使用 Big-5 編碼。chcp 65001
指令,暫時變更終端機 cmd 的編碼為 UTF-8。如果想永久變更終端機 cmd 的編碼設定,
regedit
,打開「登錄編輯程式」最後,將預設終端機設定為命令提示字元 (即是 終端機 cmd):
Ctrl + ,
或是選取 「檔案」>「喜好設定」>「設定」 (File > Preferences > Settings) ,打開設定編輯器。這樣,VS Code 儲存程式檔案使用 UTF-8 ,且整合的終端機的編碼也是 UTF-8 ,兩者一樣。
再次啟動 VS Code,C 程式輸出中文字串的亂碼問題就可以解決。
我將更多參考資料放在下面的傳送門,如果你想知道Code Runner 的其他功能、如快捷鍵等,或你想瞭解甚麼是 UTF-8 編碼,可以方便你查閱。
Code Runner 的傳送門
🌐 Code Runner - Visual Studio Marketplace
UTF-8 的傳送門
🌐 UTF-8 - 維基百科,自由的百科全書
🌐 Unicode、UTF-8、UTF-16,終於懂了 - 閱坊