2016年4月27日 星期三

給新手的C++教學 (上冊) - 1. 最簡單的程式 (The simplest program)

回到「給新手的C++教學 (上冊)」

上一章 (這是第一章)

我們口中的「寫程式」,到底是甚麼意思呢?
就是把程式碼寫出來

程式碼就像文章一樣 (這裡的例子是英文文章),都是由許多的英文字母、空白和標點符號組成的
每篇文章都有各自想表達的意義,每份程式碼也都有各自想表達的邏輯
作家利用文章來向大眾表達內心的想法,程式設計師則利用程式碼來向電腦表達邏輯

電腦要怎麼知道你想說甚麼?
我們必須學會「英文」這個語言,才能讀懂文章的意思
電腦當然也不例外
電腦必須學會「C++」這個語言,才能讀懂程式碼的意思

要怎麼讓電腦學會「C++」?
我們在學校接受教育,學會閱讀英文文章
電腦則是藉由安裝新功能,學會閱讀C++程式碼

簡單來說就是
開始寫程式之前,你的電腦最好先安裝好特定的軟體
不然你的電腦會看不懂你寫出來的程式碼
這類讓電腦看懂程式碼的軟體稱作「編譯器」
C++的編譯器就是GCC

作家在撰寫文章時需要好寫的筆、好用的橡皮擦、好寫的紙
程式設計師在撰寫程式碼時需要好用的編輯器
甚麼是編輯器?

其實你的電腦裡已經有內建的編輯器了
打開「開始→所有程式→附屬應用程式」,裡面的「記事本」就是一種編輯器 (如下圖)
這是「記事本」,是一種編輯器

你也可以用「記事本」來寫程式,不過在寫程式這方面,記事本並不是最方便的編輯器
這裡我推薦用來寫程式的編輯器是Dev-C++
可能很多人會推薦另一款編輯器Code::Blocks
用這個也可以,功能更強大
不過小莫覺得Code::Blocks就是因為功能太多、太複雜
甚至連小莫自己也不是全部的功能都會設定
因此不建議新手使用
而且自動完成太多東西,有時候會讓新手們缺乏練習並養成一些不太好的習慣
所以,用Dev-C++啦~

重要!Dev-C++的已知問題!
2017/3/20更新:經好心同學回報,Dev-C++會有許功蓋問題,因此程式碼中最好不要使用中文字(本教學的程式碼出現中文字是錯誤的示範,都沒有發生問題純粹僥倖),若真要使用中文字,建議先參考維基百科中對於此問題的介紹與解決方法(不過解法好像還滿簡單的XD)

這是「Dev-C++」,是寫程式專用的編輯器之一

更棒的是,安裝「Dev-C++」的過程中會順便自動幫你安裝好編譯器 (GCC)!
「Dev-C++」的下載連結在這裡
安裝過程很簡單,一直點「同意」、「下一步」、「安裝」之類的按鈕即可,如果你沒有按到「上一步」,應該就可以安裝成功
安裝程式沒有綑綁軟體,很乾淨,不用擔心安裝到不必要的東西

打開Dev-C++,同時按下鍵盤上的「Ctrl鍵」和「N鍵」,你會在Dev-C++裡面打開一個新的空白頁面

以下給你一張圖片,請你照著打出圖片中的文字:

你可能會發現有些字變成綠色,有些變成粗體,有些變成紅色,有些變成藍色,有些變成紫色
先不用管它
以後在寫程式時,你會發現這些顏色都有其特殊的意義

照著打完了嗎?
按下鍵盤上的「F11鍵」,它會叫你存檔
隨便存在一個你喜歡的地方就好
點選「存檔」

你發現了甚麼呢?

剛剛叫你照著打的文字就是程式碼
現在讓我來解釋這個程式碼的用途吧~

#include<cstdio>
int main()
{
    printf("Hello world!\n");
    return 0;
}

#include<cstdio>     :先照抄不用管
int main()        :先照抄不用管
{            :先照抄不用管
    printf("Hello world!\n"); :「Hello world!」那部分就是在螢幕上顯示「Hello world!」,「\n」是合在一起看的,稱作「換行符號」,類似平常打字會用到的「Enter」(註11),其他的就先照抄不用管
    return 0;        :先照抄不用管
}            :先照抄不用管

好多「先照抄不用管」喔
不是我偷懶啦,是因為就算現在告訴你在幹嘛,現階段也完全不需要去修改這些部分,我們一樣可以玩很多事情
沒錯,我們需要關心的就只有兩個「"」框起來的部分,也就是"Hello world!\n"
現在嘗試亂改這個部分 (但是那兩個「"」一定要留著),然後按下鍵盤上的「F11鍵」查看程式執行結果吧
甚麼情況下電腦會說你寫錯呢?「\」這個符號又有甚麼特殊的功用呢?
在兩個「"」框起來的部分加入「\a」、「\b」、「\c」、「\d」、......,試試看會顯示甚麼東西吧 (有些是沒有作用的)
偷偷告訴你,「\」的後面也可以接特殊符號喔,例如「\"」、「\\」(?)

下一章

感謝:奕均的留言、蘇多門、葛家聿
(版權所有 All copyright reserved)

36 則留言:

  1. 嗨嗨我是奕均
    資奧加油啊~
    我才剛把這篇"嘗試亂改"的部分試過一遍而已
    不曉得對結果的理解正不正確,先把編譯器有Warning的訊息排除,那從A到Z的話
    只有a, b, e, f, r, t, u, x 沒有警告
    a 聲音
    b 看不出來?
    e ←
    f ♀
    r 看不出來?
    t 看不出來?
    u 編譯器說錯誤(但不知道是?)
    v 這個箭頭繞了一圈耶
    x 編譯器說錯誤(但不知道是?)
    以上希望你稍微解釋一下(?)

    然後上次的bool 我有去試了成功囉~
    上次的for (int i = 0; i < n; i++)這樣的寫法我也學會了
    更能掌握宣告變數的時機
    Debug 也成功啦
    謝謝你
    然後,我有預感這篇會變垃圾郵件耶~(?)(?)(?)
    c = (是垃圾郵件) ? 1:0;

    回覆刪除
    回覆
    1. 嗨~的確被Google自動標記成垃圾留言了XD 我也不知道為甚麼
      感謝你的發問,讓我在測試中發現更多C++的秘密了,甚至還發現我的觀念也有些錯誤XD
      正在修改教學內容中,請稍後
      會嘗試解答你所有疑問的
      最後恭喜你學會bool並debug成功! ^_^

      刪除
    2. 修改完成!
      請參考「註11」哦
      感謝~~

      刪除
    3. 請問我按了F11
      為什麼會出現source file not complied ?

      刪除
    4. 您好,我沒有遇過您說的狀況耶,不好意思><
      上網研究了一下,似乎是因為您的Dev-C++不是最新版本
      可以考慮先把您的舊版Dev-C++解除安裝,再從這裡下載並安裝最新版的Dev-C++哦~
      有任何問題歡迎隨時再發問~~~

      刪除
  2. 請問我按了F11
    為什麼會出現source file not complied ?

    回覆刪除
    回覆
    1. 您好,我沒有遇過您說的狀況耶,不好意思><
      上網研究了一下,似乎是因為您的Dev-C++不是最新版本
      可以考慮先把您的舊版Dev-C++解除安裝,再從這裡下載並安裝最新版的Dev-C++哦~
      有任何問題歡迎隨時再發問~~~

      刪除
    2. 以解決
      感激

      刪除
  3. 想問一下
    用dev開啟一個新專案和開啟新分頁(ctrl+N)有什麼差別呢?
    而為什麼code block好像只能開啟專案呢?

    回覆刪除
    回覆
    1. 只要寫出來的code可以動,應該都沒差吧哈哈
      簡單來說,包含很多檔案的大程式用專案比較適合,如果只有一份code,那新分頁就好啦~
      另外,code blocks可以開啟新分頁哦~找找看(?)

      刪除
    2. 就是找不太到QQ
      每次用code blocks寫,要寫很多個程式時,就要開很多個專案覺得很麻煩而且檔案也多很多

      另外再請問一下
      code blocks一開始會建立一個資料夾,裡面會有兩個檔案,一個是.cbp一個是.cpp,請問下次再編輯時要開哪一個編輯呢

      不知道能否簡單介紹一下如何使用code blocks呢

      刪除
    3. 如果只要寫簡單的程式,何不考慮使用Dev-C++呢?:P

      刪除
    4. 我是資財系的
      之後考慮轉資工系
      但沒有使用過code blocks
      所以想要更了解一些XD

      刪除
    5. 那您可能就要另尋高手囉~
      小莫是Dev-C++打遍天下的XDD

      刪除
    6. 喔喔是喔!!
      因為聽資工系的朋友都說用code blocks比較好用XD

      刪除
    7. 不好說哦XD
      應該說兩者有各自的優缺點,至於是甚麼可能要自己體會才準,每個人的習慣、需求都不同www
      另外,Dev-C++建議由本教學提供的連結下載較新版本,直接使用Google搜尋通常會找到超舊超爛的舊版Dev-C++ XDD

      刪除
  4. 想問一下
    為什麼常看到有些程式會寫void main
    但是實際執行若寫void main卻無法執行呢

    回覆刪除
    回覆
    1. 先來陳述一下背景XD
      「C++」和「Visual C++」是兩種不同的程式語言
      原生C++並不支援任何UI的實作,因此微軟自行研發出「Visual C++」這個程式語言,目的是讓開發者可以很方便地使用幾乎和C++一樣的語法來開發Windows的應用程式
      回歸正題
      「Visual C++」應該用「void main()」
      「C++」應該用「int main()」
      了解了嗎?^_^

      刪除
    2. 所以意思是如果不是用visual c++打程式的話
      都要寫int main()對吧?

      刪除
  5. 不好意思想問一下
    以前用DEV寫時
    下方都會有bug的錯誤顯示
    但是不知道為甚麼現在都不見了
    不知道是不是我按到還是設定到了甚麼呢?QQ

    回覆刪除
    回覆
    1. 小莫看不太懂您的問題耶
      能否將截圖+完整描述傳給我呢?
      小莫的email: fsps60312@yahoo.com.tw

      刪除
    2. 已寄信了喔~~

      刪除
  6. 為什麼我無法編譯並執行阿(沒有打錯)

    回覆刪除
    回覆
    1. 能否將無法編譯並執行的截圖寄到fsps60312@yahoo.com.tw呢?(快速鍵Windows+PrtScn可截圖並存檔在我的圖片/螢幕截圖)

      刪除
  7. 回覆
    1. 不客氣~ ^_^
      不過code風景區只有小莫一個人在管理哦XD

      刪除
  8. 哈囉,之前一直用很破爛的方法解題,偶然發現你的網站決定從頭學起XD
    我用的是windiows 10,f11的功能是切換視窗耶!
    這樣是不是沒辦法用快捷鍵,只能乖乖去點build and run呢?

    回覆刪除
    回覆
    1. 想請問能附上F11變成切換視窗的截圖嗎><
      小莫剛剛用最新版windows 10測試過了,F11編譯執行應該是沒問題的哦!
      只是它會叫你先存檔,隨便存在一個地方就好,因為要先存檔成.cpp,有了那個檔案Dev-C++才能編譯並執行XD

      刪除
  9. 從web開發跑過來學C++,最驚喜的po主還有看留言+更新,讚

    回覆刪除
    回覆
    1. 會的會的!早晚問題而已,謝謝您的支持!^_^

      刪除
  10. 這裡要印出Hello world是用printf("Hello world\n");
    但是我看到有些地方寫的時cout << "Hello world" << endl;
    請問這兩個有什麼差別?

    回覆刪除
    回覆
    1. 兩種寫法都可以!這裡用的是printf,至於cout就暫時不在本教學範圍內啦~

      刪除
  11. 為什麼我按F11會出現〔Error〕expected";"before"F"?

    回覆刪除

歡迎留言或問問題~
若您的留言中包含程式碼,請參考這篇
如果留言不見了請別慌,那是因為被google誤判成垃圾留言,小莫會盡快將其手動還原

注意:只有此網誌的成員可以留言。