#教學 C++零基礎到有基礎(3)
程式設計板 2021年8月23日 16:00

輸入, 輸出與變數型別 標題放不下啦幹(? 啊哈 今天發文的不是你們平常看到那帥氣 又會寫程式 成績又是電神 會讓人暈爆的雷丘(? 是我 英文字 好啦不鬧了 我們趕快進入正題 今天我們要來介紹基本的輸入, 輸出與變數型別的部分 首先, 我們先來講變數型別 -------------------------------------------------------------------------------------------- ##變數型別(Type) 一般來講, 可以把變數型別分成五大類 1. int 2. char 3. float 4. string 5. bool ###int Int是整數(Integer)的縮寫 舉凡平常看到的0, 15, -2, 100這種的 都叫做整數 在C++中 int有三種不同的大小 這裡的大小指的是在記憶體中 可以存放的大小 那int前面有四個不一樣的形容詞去改變這個整數變數的大小 分別是short, long, long long, unsigned unsigned的意思是沒有正負號的 所以如果有一個變數他的型別是unsigned int 意思就是他是一個非負的整數 unsigned也可以跟前面三個做搭配 例如 : unsigned long int等等 語法如下圖 我們可以像第7行一樣 直接指定這個整數變數a是3 也可以像第8行跟第9行一樣 令b跟c是一個未指定的整數變數 那b跟c的差別就是整數的上限跟下限的不同 諸如此類 ###char char是字元(Character)的縮寫 像是5, *, /, %等等的符號 那符號我們有一個表叫做ASCII(American Standard Code for Information and Interchange) 他是以數字的方式去記錄了符號或是一些動作(action) 包含了33個不可印出字元以及95個可印出字元 編號分別從0一直到127 上圖是ASCII table char的語法如下圖 我們可以像第7行一樣 讓她是一個不指定的字元變數 或是像第8行一樣 直接指定這個字元變數b為B這個字元 如果很多個字元組合再一起 就會變成字串(下面會講到) 再來我想要提到比較特別的字元 叫做跳脫字元(Escape Character) 跳脫字元又叫做轉義字元 跳脫字元有兩個功能 :     1. 還原所要表示的字元或符號 —         因為有些字元如果是用平常的方式打進去         他是沒有辦法被呈現出來的         所以我們就可以利用跳脫字元         把那個字元印出來     2. 給予指令 —         像是換行 空四格等等的 ##float float是浮點數 它的定義跟在數學上的小數差不多 其語法與整數型別的類似 如下圖 都是型別加上變數名稱 那整數中有長整數long int, long long int 那浮點數有沒有 答案是有的 我們把它叫做double ##string String是字串 我們在上面有講到 很多個字元組合在一起 就會變成字串 字元跟字串在命名變數的時候有一個小差別 尤其是指定變數值的時候 如下圖 你們可以注意到 在指定變數的值的時候 字元用的是單引號 而字串用的是雙引號 這個可以小小筆記一下 ##bool bool是布林運算(Boolean Algebra)的縮寫, 他所對應的結果只有對與錯(True or False) 講到布林運算 我們就可以請出一個好朋友 叫做真值表(Truth Table) 他有一些規則可以去幫助你了解命題(Statement)是正確的還是錯誤的 讓你之後在寫程式的時候 對於邏輯的思考與順序有多一層的認識 語法如下圖 這邊我們來解釋一下這個程式碼是甚麼意思 假設1這個命題是對的 然後我們令一個布林變數a是對的 之後我們對a指派一個值 並利用if的巢狀結構去判斷a這個變數是否為1 如果是1就印出a是對的這個字串 接下來 我們就進入到輸入與輸出的部分 ##輸入與輸出(Input and Output) 輸入與輸出的用法有三組 一組是scanf/printf 一組是cin/cout 最後一組是用成員函數(Member Function) cin.get()/cout.put() 但第三組我們今天先不講 scanf對應到的是cin 而printf對應到的是cout 以C++來說 比較常用的會是第二組 怎麼用呢 我們先令一個變數a 然後用cin對a指派一個值 這邊因為我的變數型別是整數 所以a就會是一個整數 接下來 我們遇到了一個新的東西 叫做endl 這是甚麼意思呢 endl的意思是換行 跟前面在跳脫字元那邊提到的\n是一樣的(等等會來小小總結一下) 最後把a印出來 這邊可以做個小小筆記 cin跟cout的箭頭要怎麼記比較快 因為程式碼的讀取是從左到右 所以你可以想像你現在遇到一台機器 你要把一個變數丟到這台機器裡面 所以你要先從左邊的入口丟入 然後從右邊的出口出來 所以cin的箭頭會是>> cout的箭頭是<< 不然如果cin的箭頭是<< 就沒有入口可以把變數a丟進去這台機器裡面了 cout的道理類似 小小總結 : 換行的方法有三種 第一種是用endl這個manipulator 第二種是用跳脫字元而且是用字元的形態呈現(‘\n’) 第三種也是用跳脫字元但是是用字串的形態呈現(“\n”) 然後cin跟cout如果要同時輸入或輸出多個變數 是不能把全部的變數都擠在同一格裡面 像是下圖醬 這樣會讓你編譯錯誤 這個道理就有點像是 假設那個洞口一次只能放入一個東西 而你卻把全部的東西一起丟進去 是不是那個洞口就會塞住了 所以請記得(畫重點 在輸出的部分 有一個名詞 叫做格式化輸出(Formatting) 他有點像排版小工具 通常我們會利用前面提到的printf來完成 語法如下 前面放的是字串 後面放的是你被代換的變數 字串中放的是要代換的東西的型別 這裡的型別跟前面所介紹的有點不太一樣 我來幫大家整理一下 int --> d(Decimal) long (long) int --> ld float --> f double --> lf char --> c string --> s 大家可以看到上面那張圖 我在%跟型別中間的5是甚麼意思呢 這個5指的是空格的數量 假設我指派a一個值叫做23 那我這裡給了5個空格 所以在執行的時候 大家可以看到23前面有3個空格 結果如下圖 如果我們的a是一個浮點數 printf那邊的空格也可以是一個小數 如下圖 那那個6.3又是一個什麼樣的情況呢 後面的.3表示的是給小數點後的空格數 如果a這個值的小數點後的位數沒有到我給的空格數 程式執行的時候就會自動幫我補上0 前面這個6是最前面的空格數 + 整數部位的格數 + 小數點 + 小數點後的格數會等於6 所以舉例 如果我給8.3格空格 然後a是5.1 那輸出結果就會是3格空格 + 1格整數部位 + 小數點 + 100三格 所以是3 + 1 + 1 + 3 = 8 如下圖 cout也有格式化輸出的寫法 但是在最前面要引入一個叫做iomanip的函式庫(Input/Output Manipulator) 語法如下圖 我們會需要用到一個叫做setw()的函式 這個setw()裡面只能放整數 他和printf的格式化輸出有一點點的不同是 setw()他在小數點後面是不會自動幫你補上0的 其他的都一樣 都是前面空格 + 整數部分 + 小數點 + 小數點後的部分會等於所有空格數 再來講講字串的輸入與輸出 你令一個變數 型別是字串 假設輸入的是一句英文句子 你輸出的時候卻只會有一個單字卻就結束了 像是如下圖 為甚麼 這是因為電腦在判讀程式碼的時候 cin只要讀到空格或是換行就會結束了 所以我們可以利用getline()函數去讀取整個輸入的內容 語法如下圖 要注意的是 如果你用了getline 你的cin就要拿掉 因為前面的cin會先讀取到第一個i 然後到空格就會中斷 然後繼續由getline()讀取 所以會發生少了第一個字的情況 ----------------------------------------------------------------------- OK 好啦 今天的教學文就先到這邊結束啦 ㄚ有鑑於米特編輯器有夠難用(偷嘴XD 還有不要傷大家的眼睛 還有前幾篇有大佬建議我們放上用hackmd編輯過的畫面 所以就在這裡放上連結 https://hackmd.io/@ihBAVIPZTumBHFNiJOpH6w/S12TyQs0_ 但我已經盡量調到跟連結進去後的畫面一樣了 然後我是第一次寫教學文 所以如果要炮請炮小力一點 如果大佬有什麼建議或補充 可以幫我在下面留言 或是你是剛起步 想要從頭開始學的人 也可以把你的問題打在留言讓我知道 如果內文有錯誤的地方 也可以在留言區留言指正 十分感謝大家 喜歡的朋友請幫我按讚 訂閱 分享 開啟小鈴鐺(沒這東東 我是英文字 我們下次見


  回文

你可能有興趣的文章...

全部留言

B1 2021.08.23 16:01

收合內層留言icon 展開1則留言
1
B1-1 (原 Po)   2021.08.23 16:01

0
B2 2021.08.23 16:01

你終於生出來ㄌ

收合內層留言icon 展開1則留言
你終於生出來ㄌ
2
B2-1 (原 Po)   2021.08.23 16:01

生了一個月 終於生出來了(?

生了一個月 終於生出來了(?
0
B3 2021.08.23 16:01

推推

收合內層留言icon 展開1則留言
推推
1
B3-1 (原 Po)   2021.08.23 16:01

讚讚 愛你

讚讚 愛你
0
B4 (原 Po)   2021.08.23 16:02

我已經做好被個大大佬電爆還有砲火攻擊了

收合內層留言icon 展開1則留言
我已經做好被個大大佬電爆還有砲火攻擊了
2
B4-1 (原 Po)   2021.08.23 16:02

納命來吧(?

納命來吧(?
0
B5 (原 Po)   2021.08.23 16:02

然後我排版排的很辛苦

收合內層留言icon 展開1則留言
然後我排版排的很辛苦
2
B5-1 (原 Po)   2021.08.23 16:02

摳摳最好是給我多一點

摳摳最好是給我多一點
0
B6 2021.08.23 16:03

uint8_t uint16_t uint32_t???? 🤣🤣🤣

收合內層留言icon 展開1則留言
uint8_t uint16_t uint32_t???? 🤣🤣🤣
1
B6-1 (原 Po)   2021.08.23 16:03

ㄡ度阿 噓(?

ㄡ度阿 噓(?
0
B7 2021.08.23 16:04

敲碗下集

收合內層留言icon 展開1則留言
敲碗下集
1
B7-1 (原 Po)   2021.08.23 16:04

下集不是我

下集不是我
0
B8 2021.08.23 16:04

說到大佬不忘幫你@雷丘一下

收合內層留言icon 展開1則留言
說到大佬不忘幫你@雷丘一下
1
B8-1 (原 Po)   2021.08.23 16:04

他已經看過了

他已經看過了
0
B9 2021.08.23 16:05

@雷丘 看一下B6

收合內層留言icon 展開1則留言
@雷丘 看一下B6
3
B9-1 (原 Po)   2021.08.23 16:05

她知道啦 沒事啦(?

她知道啦 沒事啦(?
0

匿名

B10 2021.08.23 16:07

cin>>a>>endl?

收合內層留言icon 展開1則留言
cin>>a>>endl?
1
B10-1 (原 Po)   2021.08.23 16:07

怎麼了嗎 我應該沒打錯吧QQ 你醬問害我很ㄘㄨㄚˋ

怎麼了嗎 我應該沒打錯吧QQ 你醬問害我很ㄘㄨㄚˋ
0
B11 2021.08.23 16:22

好用心喔 但cin>>a>>endl 真的怪怪的

好用心喔 但cin>>a>>endl 真的怪怪的
0

匿名

B12 2021.08.23 16:29

筆者真的有Compile 過嗎 cin >> a >>endl 是一個在概念上錯誤也不會Compile 過的用法 我個人是很樂見程式設計版出現這種文章 但我覺得可能從教學文改成學習筆記會比較妥當

收合內層留言icon 展開1則留言
筆者真的有Compile 過嗎 cin >> a >>endl 是一個在概念上錯誤也不會Compile 過的用法 我個人是很樂見程式設計版出現這種文章 但我覺得可能從教學文改成學習筆記會比較妥當
0
B12-1 (原 Po)   2021.08.23 16:29

對...對不起 我現在改

對...對不起 我現在改
0

匿名

B13 2021.08.23 17:16

求functor在stl的運用 比如替換priority queue的compare function 看到別人寫 實在不了解為什麼這個會用到

求functor在stl的運用 比如替換priority queue的compare function 看到別人寫 實在不了解為什麼這個會用到
0

匿名

B14 2021.08.23 17:39

我真的不覺得會有人看你的文章學C++ 網路上那麼多資源 隨便一個都教得比你好 不用在這邊刷存在感 反而還被砲轟

我真的不覺得會有人看你的文章學C++ 網路上那麼多資源 隨便一個都教得比你好 不用在這邊刷存在感 反而還被砲轟
0
B15 2021.08.23 19:03

B14米特是一個平台 我們寫教學文的目的是讓更多在米特上的人想要瞭解程式 進而一起寫程式 很明顯的網路上有很多比我們好的教學文章沒錯 這些文章也是我們會推薦給大家的 此外寫教學文的目的也是提升我們自身的程式能力 您可以理解成我們刷存在感沒問題 而不管我們會不會被炮轟 我們會繼續做下去 當我發了第二篇教學文的時候 大概突然多了80個人突然追蹤我 我不認為他們會看我發的廢文就來追蹤我 所以您說不會有人看我們的文章學C++ 我是不認同的 您也可以問問看我的80幾位粉絲認不認同 有人能好好看我們的文章  那就是我們寫下去的動力 同時也很感謝 B12提出的錯誤

B14米特是一個平台 我們寫教學文的目的是讓更多在米特上的人想要瞭解程式 進而一起寫程式 很明顯的網路上有很多比我們好的教學文章沒錯 這些文章也是我們會推薦給大家的 此外寫教學文的目的也是提升我們自身的程式能力 您可以理解成我們刷存在感沒問題 而不管我們會不會被炮轟 我們會繼續做下去 當我發了第二篇教學文的時候 大概突然多了80個人突然追蹤我 我不認為他們會看我發的廢文就來追蹤我 所以您說不會有人看我們的文章學C++ 我是不認同的 您也可以問問看我的80幾位粉絲認不認同 有人能好好看我們的文章  那就是我們寫下去的動力 同時也很感謝 B12提出的錯誤
9

留言已被刪

本留言就像流星一樣,一閃即逝。

留言已被刪

本留言就像流星一樣,一閃即逝。

B18 2021.08.23 19:18

B16並沒有不開心的意思 我不知道哪裡讓你誤解了😂 只是想讓樓上上知道我們不管會不會被炮轟還是會發的 至於學習筆記的部分容許我們思考一下 我是認真滿開心看到你在樓上回的訊息 因為有人是認真看我們說的內容的 至於剛寫程式的部分 你說的是沒有錯的 因為自己還在初階的狀況  有很多當時遇到的問題可以馬上分享出來 因為都是新手所以有很多相同的問題  你說的事情我們會想一下 感謝

B16並沒有不開心的意思 我不知道哪裡讓你誤解了😂 只是想讓樓上上知道我們不管會不會被炮轟還是會發的 至於學習筆記的部分容許我們思考一下 我是認真滿開心看到你在樓上回的訊息 因為有人是認真看我們說的內容的 至於剛寫程式的部分 你說的是沒有錯的 因為自己還在初階的狀況  有很多當時遇到的問題可以馬上分享出來 因為都是新手所以有很多相同的問題  你說的事情我們會想一下 感謝
5
B19 2021.08.23 20:00

我喜歡

收合內層留言icon 展開1則留言
我喜歡
1
B19-1 (原 Po)   2021.08.23 20:00

謝謝

謝謝
0
B20 2021.08.24 01:35

我昨天重新寫hello world結果程式執行錯誤,搞半天結果是我把分號打成冒號^_^🔥

收合內層留言icon 展開1則留言
我昨天重新寫hello world結果程式執行錯誤,搞半天結果是我把分號打成冒號^_^🔥
4
B20-1 (原 Po)   2021.08.24 01:35

請你要學會看錯誤訊息好嗎WWWWWWWWWW

請你要學會看錯誤訊息好嗎WWWWWWWWWW
0

匿名

B21 2021.08.24 04:19

推~好文 可以卡一個python的教學文嗎w

收合內層留言icon 展開1則留言
推~好文 可以卡一個python的教學文嗎w
3
B21-1 (原 Po)   2021.08.24 04:19

py...python喔 讓我們想想

py...python喔 讓我們想想
0
B22 2021.08.24 04:38

你好棒(;´༎ຶД༎ຶ`) B18你也好棒(;´༎ຶД༎ຶ`)

收合內層留言icon 展開1則留言
你好棒(;´༎ຶД༎ຶ`) B18你也好棒(;´༎ຶД༎ຶ`)
3
B22-1 (原 Po)   2021.08.24 04:38

穴穴你QQ

穴穴你QQ
0
B23 2021.08.24 05:06

B14我,我會 你的臉腫不腫? 我真的不覺得會有人看你的流言而放棄任何一個學習C++的機會 網路上那麼多資源 或許隨便一個都教得比他好 但是難道這些就不是資源嗎?何況這裡還可以發問呢 不用在這邊刷存在感 反而還被砲轟😉😉

收合內層留言icon 展開1則留言
B14我,我會 你的臉腫不腫? 我真的不覺得會有人看你的流言而放棄任何一個學習C++的機會 網路上那麼多資源 或許隨便一個都教得比他好 但是難道這些就不是資源嗎?何況這裡還可以發問呢 不用在這邊刷存在感 反而還被砲轟😉😉
3
B23-1 (原 Po)   2021.08.24 05:06

謝謝你的支持

謝謝你的支持
0
B24 2021.08.24 05:06

哎呀呀錯字 #留言 啦

哎呀呀錯字 #留言 啦
2
B25 2021.08.24 09:16

按讚 訂閱 放入收藏箱(`>∀・)b(欸不對 但我有看完啦ꉂ(ˊᗜˋ*)

收合內層留言icon 展開1則留言
按讚 訂閱 放入收藏箱(`>∀・)b(欸不對 但我有看完啦ꉂ(ˊᗜˋ*)
3
B25-1 (原 Po)   2021.08.24 09:16

放入收藏箱是必須的吧(?

放入收藏箱是必須的吧(?
0

匿名

B26 2021.08.24 09:53

同溫層厚到可以擋子彈

同溫層厚到可以擋子彈
0
B27 2021.08.24 10:38

B26欸嘿嘿 不要被反駁就說是同溫層啦 我跟上面 B23其實沒說過太多話 我知道你想尋求認同 但這裡是程式設計板 麻煩不要來鬧

B26欸嘿嘿 不要被反駁就說是同溫層啦 我跟上面 B23其實沒說過太多話 我知道你想尋求認同 但這裡是程式設計板 麻煩不要來鬧
0
B28 2021.08.24 11:09

B26我覺得你不要再說了啦,自打嘴巴 誰之前說"我真的不覺得會有人看你的文章學C++"的阿 現在又說很多同溫層 神邏輯欸割 "不用在這邊刷存在感 反而還被砲轟" 同樣的一句話我原封不動還給你 😉

B26我覺得你不要再說了啦,自打嘴巴 誰之前說"我真的不覺得會有人看你的文章學C++"的阿 現在又說很多同溫層 神邏輯欸割 "不用在這邊刷存在感 反而還被砲轟" 同樣的一句話我原封不動還給你 😉
2
B29 2021.08.24 15:24

文組ㄉ我本來想多學點東西 現在突然頭有點痛

收合內層留言icon 展開1則留言
文組ㄉ我本來想多學點東西 現在突然頭有點痛
1
B29-1 (原 Po)   2021.08.24 15:24

加油 你可以的

加油 你可以的
0
B30 2021.08.24 16:03

為什麼我沒看到

收合內層留言icon 展開1則留言
為什麼我沒看到
2
B30-1 (原 Po)   2021.08.24 16:03

再睡阿(?

再睡阿(?
0

留言已被刪

本留言就像流星一樣,一閃即逝。

B32 2021.08.24 16:23

我這邊卡個dp路徑規劃 每次刷題都超卡

收合內層留言icon 展開1則留言
我這邊卡個dp路徑規劃 每次刷題都超卡
1
B32-1 (原 Po)   2021.08.24 16:23

如果我們生的出來的話QQ(?

如果我們生的出來的話QQ(?
0
B33 2021.08.25 02:01

大學程式靠你了 謝謝

收合內層留言icon 展開1則留言
大學程式靠你了 謝謝
1
B33-1 (原 Po)   2021.08.25 02:01

啊也要我會寫欸(?

啊也要我會寫欸(?
0

匿名

B34 2021.08.25 20:03

B13你是指類似這段 Code 的寫法嗎? https://stackoverflow.com/a/44795242 是的話簡單來說,如同你提到 std::priority_queue 的第三個 Type 是要塞一個 Compare function 在 C++ 中,`()` 也是一個 Operator,是可以被 Overload 的,所以你可以寫一個 Class 並且 Overload () 來把他當作一個 Functor 傳進去,達到 Compare 的功能

收合內層留言icon 展開1則留言
B13你是指類似這段 Code 的寫法嗎? https://stackoverflow.com/a/44795242 是的話簡單來說,如同你提到 std::priority_queue 的第三個 Type 是要塞一個 Compare function 在 C++ 中,`()` 也是一個 Operator,是可以被 Overload 的,所以你可以寫一個 Class 並且 Overload () 來把他當作一個 Functor 傳進去,達到 Compare 的功能
1
B34-1 (原 Po)   2021.08.25 20:03

感謝你的補充跟解說 其實我覺得你可以直接寫一篇文了wwwww 可以賺一些流量(X 可以讓大家多學一點東西(O (?

感謝你的補充跟解說 其實我覺得你可以直接寫一篇文了wwwww 可以賺一些流量(X 可以讓大家多學一點東西(O (?
0

匿名

B35 2021.08.25 20:04

續樓上,超過 500 不讓我發== 不過關於你提到的情境,我其實最一開始聯想到的是 C++11 後的 Lambda Expression Lambda 允許你寫「匿名函式」(Anonymous Function),可以很大程度的縮短你的 Code 就像是 ``` std::priority_queue<int, vector<int>, decltype([](int lhs, int rhs) {     return lhs < rhs; })> pq; // or declare it first auto cmp = [](int lhs, int rhs) { return lhs < rhs; }; std::priority_queue<int, std::vector<int>, decltype(cmp)> pq; ``` 概念上差不多就是了 另外 Anonymous Function 也很常在 sort() 看到 通常會把像是上面的 cmp 當作第三個引數傳進去

續樓上,超過 500 不讓我發== 不過關於你提到的情境,我其實最一開始聯想到的是 C++11 後的 Lambda Expression Lambda 允許你寫「匿名函式」(Anonymous Function),可以很大程度的縮短你的 Code 就像是 ``` std::priority_queue<int, vector<int>, decltype([](int lhs, int rhs) {     return lhs < rhs; })> pq; // or declare it first auto cmp = [](int lhs, int rhs) { return lhs < rhs; }; std::priority_queue<int, std::vector<int>, decltype(cmp)> pq; ``` 概念上差不多就是了 另外 Anonymous Function 也很常在 sort() 看到 通常會把像是上面的 cmp 當作第三個引數傳進去
0

匿名

B36 2021.08.25 21:15

B34哇太感謝了 我再來也來用用看lambda

B34哇太感謝了 我再來也來用用看lambda
0


登入後發表留言






確定要刪除此文章?
#教學 C++零基礎到有基礎(3)

輸入, 輸出與變數型別 標題放不下啦幹(? 啊哈 今天發文的不是你們平常看到那帥氣 又會寫程

檢舉文章
檢舉原po回覆B0留言
請選擇刪除文章原因
請選擇刪除留言原因
您即將進入之文章內容需滿十八歲方可瀏覽

根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於網站首頁或各該限制級網頁,依台灣網站分級推廣基金會規定作標示。若您尚未年滿十八歲,麻煩點選離開。若您已滿十八歲,一樣不可將本區之內容派發、傳閱、出售、出租、交給或借予年齡未滿18歲的人士瀏覽閱讀,或將本網站內容向該人士出示、播放或放映。

離開
問題讀取中...稍待60秒...