# C++ Primer 5th Chapter 1 ###### tags: `C++ Learning` 這系列的筆記是想寫給自己看的C++學習記錄 > 因為我自己有點程式的基礎,但是自認對程式架構不甚瞭解,所以才決定接受朋友建議來硬啃這本聽說是神書的。 我有學過基礎的 C 然後會打點 python,但對 C++ 是完全陌生,希望能透過這樣的方法督促自己學習,也希望幫到某個剛好看到這份筆記的人。 我紀錄的方法應該是對我覺得重要的內容筆記,然後把我寫的作業習題放上來,如果有什麼其他的發現也會補充在這上面。 ## 1.1我目前認為 C++ 是由一連串的 function 構成程式 >原文: C++ 程式都包含一個以上的 function,其中一個一定要命名為 main ```cpp= int main(){ return 0; }//一個只會回傳0的主函式 ``` 系統呼叫程式時,會以`main`中的內容為主要執行內容,如果`main`有使用到其他函數才會在呼叫。 `int`代表這個函式的型別(type)是一個整數(也就是將會回傳整數),通常`main`回傳的值會當成**狀態指示**(也就是這個程式的執行結果)。 ### 1.1.1編譯 當寫好一個程式存檔後,檔名例如是 : practice.cpp。這時就可以用 Terminal 對程式進行編譯(我用的是macos,使用g++編譯) ```typescript= g++ -o a practice.cpp ``` 也可以是 ```typescript= g++ practice.cpp -o a ``` ==補充== - `practice.cpp` 是要被編譯的檔名 - `a`是編譯完後產生的檔案的檔名 - 如果 `-o a`不打,預設檔名是`a.out` 編譯完後執行 ```typescript= ./ a ``` 執行完成後可以確認狀態 ```typescript= echo $? ``` 如果是在windows可以用 ```typescript= echo %ERRORLEVEL% ``` #### 習題章節 如果把回傳改成`-1`會發生什麼事? ```cpp= int main() { return -1; } ``` >ANS: 使用`echo $?`確認後,回傳值為255 ## 1.2輸入輸出 : C++的 cout<< 與 cin>> C++ 使用 iostream 函式庫來處理輸入和輸出(資料流),資料的型態是字元序列 ( a sequence of characters)。 ### 標準輸入(standard input)與標準輸出(standard ouput) 應該就和C的 scanf 和 printf 或是 python 的 input 和 print 差不多,主要用來處理鍵盤輸入與螢幕輸出。 使用前要記得引用`iostream`函式庫,用之前也要使用`std::`代表他是來自標準函式庫的函數(方法) ```cpp= #include <iostream> int main() { std::cout << "Enter two number, please"<<std::endl //使用標準函式庫的output輸出"Enter two..."這個字串 //接著再輸出std::endl這個換行的 int num1, num2 = 0; std::cin>>v1>>v2; std::cout<< "The sum of" << num1 << "and" << num2 << "is" << num1 + num2 return 0; } ``` 1. 使用std::cout輸出想要的資訊並且換行 2. 宣告兩個整數用來儲存輸入 3. 把讀到的兩個整數放入 num1 和 num2 4. 印出想要的資訊 `<<`是運算子,把右手邊的值傳給左手邊的 ostream 物件 (應該可以想成把右邊的運算元傳給左邊的運算元) `>>`是輸入用的運算子,把左手邊的instream 輸入給右手邊的物件 ==補充== 1. `std::cout<<"Plese enter a number" << std::endl; 可以改寫成` ```cpp= std::cout<<"Please enter a number"; std::endl; ``` 2. `//`後方的字是註解,不會被執行 #### 習題章節 >寫一個城市在標準輸出印出 Hello, World ```cpp= #include <iostream> int main(){ std::cout<<"Hello, would"; return 0; } ``` >使用`*`運算子印出乘積 ```cpp= #include <iostream> int main(){ std::cout<<"Enter two number"<<std::endl; int num1, num2 = 0; std::cin>> num1 >> num2 ; std::cout<<"The product of two number is " << num1 * num2<<std::endl; return 0; } ``` >檢查下列程式是否合法 >- std::cout << "Input number is " << v1; > <<" and " << v2; ><< std::endl; > 不合法,因為有分號出現了,應該要改成 >- std::cout << "Input number is " << v1; > std::cout <<" and " << v2; > std::cout << std::endl; ## 1.3 註解的用法 註解可以增加程式的可讀性,也方便記錄當時的想法和修改過程。或是可以先用註解把可能出錯的程式片段消除來找 bug 在哪裏。 註解有分單行的`//`和多行的`/* */`,使用上可以想成`//`的優先度大於`/**/` ```cpp= // 在單行註解後方的新註解/*45645646*/也不會生效 /*多行註解像是這樣 * 第二行 * 第三行 */ int a = 1; ``` 使用`/**/`要小心以下範例 #### 習題章節 1. >std::cout << "/*" 正確,會印出 `*` 2. >std::cout <<"*/" 正確,會印出`*/` 3. ```cpp= >std::cout << /*"*/" */; ``` 應該改成 ```cpp= std::cout << /* "*/" */"; ``` 會印出 `*/`