iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0
自我挑戰組

玩程式新手村 – C和Python系列 第 8

第8天- Code Runner學習過程

  • 分享至 

  • xImage
  •  

遇到疑難雜症怎麼辦?

在學習程式語言或程式設計時,都會遇到許多奇怪問題,有些是程式碼本身,但有些卻是在操作工具時出問題。這時候就要拿出玩遊戲打怪物的精神,百折不撓多方找尋解答。

這是甚麼意思呢?對於一個新手,你我遇到的操作上問題,大部份也有先行的人會遇到過。首先,自己要釐清這不是程式碼問題。然後上網或到開發論壇尋找是否有相似的問題,並查看是否有解答。另外,現在有類似 ChatGPT AI,也可以詢問它。但是要注意的是解答不一定是正確,也不會是唯一解。

下面就列出一些我個人使用 Code Runner 延伸模組遇到的問題。

  1. 錯誤訊息 … … … undefined reference to `WinMain'
    原因:編譯一個有 main()函式 的C語言程式,但卻收到此錯誤,很可能是這程式碼出了問題。檢查程式碼後,只能猜測原因是檔案修改但尚未儲存。

  2. 當執行到 C 程式碼的 scanf() 函式,程式不能繼續執行
    原因:這是因為 Code Runner 原本設定,使scanf()函式輸出不在終端機 (Terminal),而在 輸出(OUTPUT) 。

  3. 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 的編碼是什麼?

  • 打開 Windows 終端機 cmd
    在Windows 左下角搜尋欄位 (或是按下 win鍵+R), 輸入 cmd 啟動「命令提示字元」
  • 輸入 chcp 指令,它會顯示 Active code page: 950,這表示它使用 Big-5 編碼。
  • 你可以輸入 chcp 65001 指令,暫時變更終端機 cmd 的編碼為 UTF-8

如果想永久變更終端機 cmd 的編碼設定,

  • 按下 win鍵+R,輸入 regedit,打開「登錄編輯程式」
  • 找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
  • 滑鼠右鍵點選空白處,選擇 “新增 > 字串值” 指令
  • 命名為 “autorun”
  • 滑鼠右鍵再點選“autorun”,選擇”修改”指令,數值資料填寫 “chcp 65001”

最後,將預設終端機設定為命令提示字元 (即是 終端機 cmd):

  • 按下快捷鍵 Ctrl + , 或是選取 「檔案」>「喜好設定」>「設定」 (File > Preferences > Settings) ,打開設定編輯器。
  • 在設定中,透過搜尋列搜尋 "Terminal default profile"。
  • 更改 "Terminal › Integrated: Default Profile: Windows" 的設定為 “Command Prompt”

這樣,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,終於懂了 - 閱坊


上一篇
編譯並執行C程式
下一篇
第9天- Debug: 怎樣除蟲
系列文
玩程式新手村 – C和Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言