在 C++ 中建立主控台計算機
C++ 程式設計人員的一般起點是命令行上執行的 “Hello, world!” 應用程式。 您將從本文開始,然後我們繼續進行更具挑戰性的內容:計算機應用程式。
必要條件
- 已安裝 C++ 工作負載並在電腦上執行的桌面開發 Visual Studio。 若要安裝,請參閱 在 Visual Studio 中安裝 C++ 支援。
- 本教學課程示範一項稱為編輯並繼續的功能,可讓您在執行應用程式時變更程序代碼。 若要啟用編輯並繼續,請從主功能表中選取 [工具>選項>>偵錯一般],並確定已核取 [要求原始程序檔完全符合原始版本]。
建立您的應用程式專案
Visual Studio 會使用 專案 來組織應用程式的程式代碼,以及 組織一或多個項目的解決方案 。 專案包含用來建置應用程式的所有選項、組態和規則。 它也會管理所有專案之檔案與任何外部檔案間的關聯性。 若要建立您的應用程式,請先建立新的專案和方案。
啟動 Visual Studio--[Visual Studio 開始] 對話框隨即出現。 選取 [建立新專案 ] 以開始使用。
對話框有複製存放庫、開啟專案或方案、開啟本機資料夾,以及建立新項目的選項。
在專案範本清單中,選取 [ 主控台應用程式],然後選取[ 下一步]。
重要
請務必選取主控台應用程式範本的 C++ 版本。 它有 C++、Windows 和 Console 標籤,角落有 "++" 圖示。
在 [設定新專案] 對話框中,選取 [項目名稱] 文本框,將新的專案命名為 CalculatorTutorial,然後選取 [建立]。
系統會建立空的 C++ Windows 控制台應用程式 'Hello World' 應用程式。 主控台應用程式會使用 Windows 主控台視窗來顯示輸出並接受使用者輸入。 在 Visual Studio 中,一個編輯器視窗隨即開啟,並顯示產生的程式碼:
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> int main() { std::cout << "Hello World!\n"; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
驗證您新的應用程式可以建置及執行
新 Windows 主控台應用程式範本會建立簡易的 C++ "Hello World" 應用程式。 此時,您會看到 Visual Studio 如何直接從 IDE 建置及執行您建立的應用程式。
若要建置專案,請從 [建置] 功能選取 [建置方案]。 [輸出] 視窗會顯示建置過程的結果。
若要執行程式代碼,請在功能表欄上選取 [偵錯]、 [啟動但不偵錯 ] (Ctrl+F5)。
主控台視窗會隨即開啟並執行您的應用程式。
當您在 Visual Studio 中啟動主控台應用程式時,它會執行您的程式碼,然後印出「按任意鍵即可關閉此視窗」。 . 。“ 可讓您有機會查看輸出。
恭喜! 您已在 Visual Studio 中建立第一個 “Hello, world!” 控制台應用程式!
請按任意鍵關閉主控台視窗並返回 Visual Studio。
您現在已具備了在每一項變更之後建置及執行您應用程式的工具,可驗證程式碼仍依照您預期的方式運作。 稍後,我們會示範如何偵錯它,如果它沒有。
編輯程式碼
現在,讓我們將此範本中的程式碼修改為計算機應用程式。
將檔案的內容
CalculatorTutorial.cpp
取代為下列程序代碼,使其符合此範例:// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> using namespace std; int main() { cout << "Calculator Console Application" << endl << endl; cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl; return 0; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
了解程式碼:
#include
陳述式可讓您參考位於其他檔案中的程式碼。 有時候,您可能會看到檔案名稱以角括弧 (<>) 括住;其他時候,則會以引號 (" ") 括住。 一般情況下,角括弧會在參考 C++ 標準程式庫時使用,引號則用於其他檔案。using namespace std;
這一行則會告知編譯器,預期在此檔案中使用來自 C++ 標準程式庫的功能。 如果沒有這一行,連結庫中的每個關鍵詞必須前面加上std::
,才能表示其範圍。 例如,若沒有該行,每個對cout
的參考都必須寫成std::cout
。 新增using
陳述式的目的是為了讓程式碼看起來更乾淨。cout
關鍵字則用於印出至 C++ 中的標準輸出。 << 運算子則會告知編譯器,將此運算子右側的任何事物傳送至標準輸出。- 關鍵詞
endl
就像 Enter 鍵;它會結束這一行,並將游標移至下一行。 最好是將 放在\n
字串內(包含""
的)內,以執行相同的動作,因為endl
一律會排清緩衝區,這可能會損害程式的效能。 但是,由於這是一個非常小的應用程式,endl
因此會改為用於更好的可讀性。 - 所有 C++ 陳述式都必須以分號結尾,且所有的 C++ 應用程式都必須包含一個
main()
函式。 此函式是程式在開始時執行的部分。 所有程式碼都必須要能夠從main()
存取,才能使用。
若要儲存盤案,請按 Ctrl+S,或選取 IDE 頂端附近的 [儲存 ] 圖示,功能表欄下工具列中的磁碟片圖示。
若要執行應用程式,請按 Ctrl+F5 或移至 [偵 錯] 功能表,然後選取 [ 啟動但不偵錯]。 您應該會看到一個主控台視窗出現,它顯示程式碼中指定的文字。
當您完成時,請關閉主控台視窗。
新增程式碼來執行數學運算
類別就像是物件的藍圖,可進行某些操作。 在此情況下,我們會定義計算機類別來包含數學邏輯。
新增 Calculator 類別
移至 [ 專案] 功能表,然後選取 [新增類別]。 在 [類別名稱] 編輯方塊中,輸入 Calculator。 選取 [確定]。
類別名稱欄位設定為計算機。 .h 檔案欄位包含 Calculator.h。 .cpp檔案欄位包含Calculator.cpp。 基類欄位是空的。 未核取虛擬解構函式、內嵌和 Unmanaged 的其他選項。
會將兩個新檔案新增到您的專案。 若要一次儲存您所有變更的檔案,請按 Ctrl+Shift+S。 它是 [檔案]>[全部儲存] 的鍵盤快速鍵。 [全部儲存] 也有一個工具列按鈕,即兩個磁碟片的圖示,您可在 [儲存] 按鈕的旁邊找到。 一般情況下,頻繁地進行 [全部儲存] 是良好的做法,因為這樣可避免您在儲存時遺漏任何檔案。
[ 新增類別 精靈] 會
.h
建立 與 類別同名的檔案.cpp
。 您可以在 IDE 側邊可看到的 [方案總管] 視窗中,看見您專案檔案的完整清單。 如果看不到視窗,您可以從功能表列開啟視窗:選取 [檢視> 方案總管]。計算機教學課程專案具有頭文件節點,其中包含 Calculator.h。 [來源檔案] 節點包含Calculator.cpp和CalculatorTutorial.cpp。 可看見參考、外部相依性和資源文件的節點,但已關閉。
您可以在 方案總管 視窗中按兩下檔案,以開啟檔案。 按兩下
Calculator.h
以開啟它。將 的內容
Calculator.h
取代為下列程式代碼,讓檔案現在看起來像這樣:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };
了解程式碼
- 此程式代碼會宣告名為
Calculate
的新函式,我們用來執行數學運算,以進行加法、減法、乘法和除法。 - C++ 程式代碼會組織成 標頭 (
.h
) 檔案和 來源 (.cpp
) 檔案。 各種編譯器還支援數種其他副檔名,但這些是您需了解的主要項目。 函式和變數通常會經過「宣告」,即在標頭檔中提供名稱和型別,然後在來源檔案中「實作」(或提供定義)。 若要存取另一個檔案中定義的程式代碼,您可以使用#include "filename.h"
,其中filename.h
是宣告您要使用的變數或函式的檔名。 - 將您的程式碼根據其用途整理成不同檔案是一種良好做法,因為這可讓您在稍後需要的時候輕易地尋找它們。 在我們的案例中,我們將
Calculator
類別與包含main()
函式的檔案分開來定義,但我們計劃在main()
中參考Calculator
類別。
- 此程式代碼會宣告名為
綠色波浪線會出現在 下方
Calculate
,因為雖然已宣告函Calculate
式,但並未定義。 將滑鼠停留在Calculate
上方,按兩下出現的螺絲起子上的向下箭號,然後在中Calculator.cpp
選取 [建立 'Calculate' 的定義]。此程式代碼會新增至
Calculator.cpp
:建構函式的定義是:double Calculator::Calculate( double x, char oper, double y) { return 0.0; }
目前,它只會傳回 0.0。 讓我們改變這點。
切換至
Calculator.cpp
編輯器視窗中的檔案。 將的內容Calculator::Calculate(double x, char oper, double y)
取代為:double Calculator::Calculate(double x, char oper, double y) { switch(oper) { case '+': return x + y; case '-': return x - y; case '*': return x * y; case '/': return x / y; default: return 0.0; } }
了解程式碼
Calculate
函式會取用一個數字、一個運算子及第二個數字,然後在數字上執行所要求的運算。- Switch 陳述式會檢查提供的運算子為何,並只執行對應至該運算的案例。 default: 案例是一種後援案例,若使用者鍵入不接受的運算子,即會使用此案例以避免中斷程式。 一般情況下,使用更簡潔的方式處理無效使用者輸入會是最佳做法,但這不在本教學課程的範圍內。
double
關鍵字表示支援小數點的一種數字類型。 如此一來,計算機便能夠同時處理小數點及整數的數學運算。Calculate
函式必須一律傳回這種數字,因為程式碼開頭的double
(表示函式的傳回型別) 如此要求,而這也是為什麼即使在預設案例中,我們也傳回 0.0。- 檔案
.h
會宣告函 式原型,其會事先告知編譯程式需要哪些參數,以及預期其傳回類型。 檔案.cpp
具有函式的所有實作詳細數據。
如果您此時再次建置並執行程序代碼,它會在要求執行哪個作業之後立即結束。 因此,修改函 main
式以執行多個計算。
Calculator
呼叫類別成員函式
更新 中的
CalculatorTutorial.cpp
函main
式,如下所示:// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include "Calculator.h" using namespace std; int main() { double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout << "Calculator Console Application" << endl << endl; cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl; Calculator c; while (true) { cin >> x >> oper >> y; result = c.Calculate(x, oper, y); cout << "Result " << "of " << x << oper << y << " is: " << result << endl; } return 0; }
了解程式碼
- 由於 C++ 程式一律會從
main()
函式開始,而我們需要從該處呼叫我們的其他程式碼,因此需要#include
陳述式。 - 我們宣告了某些初始變數
x
、y
、oper
和result
,分別用來儲存第一個數字、第二個數字、運算子及最終結果。 最好給他們一些初始值,以避免未定義的行為,這就是這裡完成的工作。 Calculator c;
這一行會宣告一個名為 'c' 的物件,作為Calculator
類別的執行個體。 類別本身只是計算機運作的藍圖;物件則是進行數學運算的特定計算機。while (true)
陳述式是一種迴圈。 只要()
內的條件為 True,迴圈內的程式碼就會繼續重複執行。 由於此處條件直接列為true
,代表條件一律為 True,因此這個迴圈會永遠執行下去。 若要關閉程式,使用者必須手動關閉主控台視窗。 否則,程式一律都會等待新的輸入。cin
關鍵字則用於接受使用者的輸入。 假設使用者輸入符合必要規格,輸入串流便能處理在主控台視窗中輸入的文字行,並依序將它放在每個列出的變數內。 您可以修改這一行以接受不同類型的輸入,例如兩個以上的數字,不過Calculate()
函式也需要更新才能處理此作業。c.Calculate(x, oper, y);
運算式會呼叫先前定義的Calculate
函式,並提供輸入的輸入值。 函式接著會傳回儲存在result
中的數字。- 最後,
result
會印出到主控台,讓使用者看見運算的結果。
- 由於 C++ 程式一律會從
再次建置並測試程式碼
現在再次測試程式,以確保一切正常運作。
請按 Ctrl+F5 來重新建置並啟動應用程式。
輸入
5+5
,然後按 Enter。 驗證結果為 10。應用程式輸出訊息:請輸入要執行的作業。 格式:a+b |a-b |a*b |a/b. 用戶輸入 5+5。 應用程式輸出:結果 5+5 為:10
偵錯應用程式
由於使用者可以在主控台視窗中輸入任何專案,因此讓我們確定計算機會處理非預期的輸入。 讓我們不要執行程式,而是進行偵錯,以便我們可以檢查其執行逐步執行的內容。
在調試程式中執行應用程式
在
CalcuatorTutorial.cpp
中,在行上設定斷點:result = c.Calculate(x, oper, y);
。 若要設定中斷點,請按一下編輯器視窗左邊緣灰色垂直列中的行。 此時會出現一個紅點。現在當我們偵錯程式時,執行會暫停在該行。 我們已初步了解程式適用於簡單案例。 由於我們不想在每次呼叫
Calculate()
時暫停執行,因此讓我們設定斷點條件。以滑鼠右鍵按兩下代表斷點的紅點,然後選取 [ 條件]。 在條件的編輯方塊中,輸入
(y == 0) && (oper == '/')
。 選取 [ 關閉 ] 按鈕以儲存斷點條件。斷點的條件是:y==0 && oper == '/' 為 true。
現在,當應用程式嘗試除以 0 時,執行會在斷點暫停。
若要偵錯程式,請按 F5,或選取 具有綠色箭號圖示的 [本機 Windows 調試程式] 工具列按鈕。 在您的主控台應用程式中,若您輸入像是 "5 - 0" 的內容,程式會正常運作並繼續執行。 但是,若您鍵入 "10 / 0",它便會在中斷點暫停。 您可以在運算符和數字之間放置任意數目的空格:
cin
足夠聰明,可以適當地剖析輸入。
偵錯工具中有用的視窗
當您對程式代碼進行偵錯時,您可能會注意到會出現一些新的視窗。 這些視窗可協助您的偵錯體驗。 讓我們看看 [自動變數] 視窗。 [自動變數] 視窗會顯示從至少 3 行以前到目前這一行為止,所使用變數目前的值。
oper 的值是 47 '/',結果為 5、x 為 10,而 y 為 0。
若要查看來自該函式的所有變數,請切換到 [區域變數] 視窗。 您可以在偵錯時修改這些變數的值,以查看它們對程式有何影響。 在此案例中,我們會讓他們獨自離開。
oper 的值是 47 '/',結果為 0、x 為 10,而 y 為 0。
您也可以將滑鼠停留在程式碼中的變數上方,以查看其目前執行暫停時的值。 請按一下編輯器視窗,確認該視窗仍擁有焦點。
繼續偵錯
左邊的黃色箭號會顯示目前的執行點。 目前的行會呼叫
Calculate
,因此請按 F11 來 [逐步執行] 函式。 現在,您正在函式主體Calculate
中執行程序代碼。 請小心逐步 執行, 因為它會逐步執行您所上行的任何函式,包括標準連結庫函式。 您可以逐步執行標準連結庫,但您可能更有興趣專注於您的程序代碼,而不是連結庫程序代碼。現在當執行點位於
Calculate
函式的開頭時,請按 F10 來移動到程式執行的下一行。 F10 又稱為 [不進入函式]。 您可以使用 [不進入函式] 來從一行移動到下一行,而無須了解該行每個部分所發生的事件。 一般而言,您應該使用 「逐步執行 」,而不是 「逐步執行 」,除非您想要更深入地深入探討從其他地方呼叫的程式代碼(就像您達到 的Calculate
主體一樣)。繼續使用 F10 以不進入每一行函式,直到您回到另一個檔案的
main()
,並在cout
行上停止。程式正在執行預期的工作:它會採用第一個數位,並將它除以第二個數位。 在
cout
行上,在result
變數上暫留或在 [自動變數] 視窗中查看result
。 其值inf
,看起來不對,因此讓我們修正它。cout
行只會輸出任何儲存在result
中的值,因此當您使用 F10 前往下一行時,會顯示主控台視窗:應用程式輸出:請輸入要執行的作業。 格式:a+b |a-b |a*b |a/b. 用戶輸入 5-0。 應用程式輸出:結果為:5。 THe 使用者輸入 10/0。 應用程式輸出:結果為:inf
此結果是因為零除為未定義,因此程序沒有所要求作業的數值答案。
修正「除以零」錯誤
讓我們更正常地處理除法,讓使用者更容易了解問題。
在
CalculatorTutorial.cpp
中進行下列變更。 (您可以讓程式在編輯時繼續執行,這要歸功於稱為 的調試程式功能編輯後繼續)。if
新增下列cin >> x >> oper >> y;
語句,以檢查除法是否為零,並在發生時將訊息輸出給使用者。 否則,會列印結果。// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include "Calculator.h" using namespace std; int main() { double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout << "Calculator Console Application" << endl << endl; cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl; Calculator c; while (true) { cin >> x >> oper >> y; if (oper == '/' && y == 0) { cout << "Attempted to divide by zero!" << endl; continue; } else { result = c.Calculate(x, oper, y); } cout << "Result " << "of " << x << oper << y << " is: " << result << endl; } return 0; }
按 F5 一次。 程式會繼續執行,直到需要暫停要求使用者輸入為止。 再次輸入
10 / 0
。 現在會印出更有幫助的訊息。 程式會向使用者要求更多輸入,且程式會繼續正常執行。控制台視窗會顯示兩行:10 / 0 結果為:inf,後面接著 10 / 0 數學錯誤:嘗試除以零。
注意
當您在處於偵錯模式的期間編輯程式碼時,可能會有程式碼過時的風險。 這會在偵錯工具仍在執行您的舊版程式碼,且尚未使用您的變更進行更新時發生。 調試程式會顯示對話方塊,以通知您何時發生這種情況。 有時候,您可能需要按 F5 來重新整理正在執行的程式碼。 特別是,如果您在函式內進行變更,而執行點位於該函式內,則需要逐步離開函式,然後再回到該函式,以取得更新的程序代碼。 如果這無法運作,而且您看到錯誤訊息,您可以單擊 IDE 頂端功能表選單的紅色方塊來停止偵錯,然後輸入 F5 或選擇工具列上停止按鈕旁的綠色「播放」箭號,再次開始偵錯。
編輯後繼續可能會失敗的另一個原因是,如果您看到一則訊息,指出「需要原始程序檔完全符合偵錯->選項->一般]底下的原始版本設定,則必須啟用...」。若要修正此問題,請從主功能表中選取 [工具>選項>>偵錯一般],並確定已核取 [要求原始程序檔完全符合原始版本]。
了解執行和偵錯快速鍵
- F5 (或 [偵錯]>[開始偵錯]) 會啟動偵錯工作階段 (若沒有正在使用中的工作階段) 並執行程式,直到到達中斷點或程式需要使用者進行輸入。 若不需要使用者輸入且沒有可到達的中斷點,程式會在完成執行時終止並關閉主控台視窗本身。 如果您有類似要執行的 「Hello World」 程式,請在按下 F5 以保持窗口開啟之前,先使用 Ctrl+F5 或設定斷點。
- Ctrl+F5 (或 [偵錯]>[啟動但不偵錯]) 會執行應用程式,而不會進入偵錯模式。 這比偵錯稍快,且主控台視窗會在程式完成執行時維持在開啟狀態。
- F10 (又稱為 [不進入函式]) 可讓您逐一且逐行查看程式碼,並視覺化程式碼執行方式及每個執行步驟中的變數值為何。
- F11 (又稱為 [逐步執行]) 的運作方式與 [不進入函式] 相似,但它會進入任何在執行行上呼叫的函式。 例如,當執行的行呼叫一個函式時,按 F11 會將指標移動到函式主體,讓您可以跟隨所執行的函式程式碼,然後回到您開始的那一行。 按 F10 可不進入函式,直接移動到下一行;函式仍會獲得呼叫,但程式不會暫停並顯示其正在進行的操作。
關閉應用程式
- 若仍在執行中,請關閉計算機應用程式的主控台視窗。
新增 Git 原始程式碼控制
既然您已建立應用程式,您可能就想要將其新增至 Git 存放庫。 我們會助您一臂之力。 Visual Studio 會透過您可以直接從 IDE 使用的 Git 工具,讓該流程變得容易。
提示
Git 是最廣泛使用的新式版本控制系統,因此無論您是專業開發人員,還是您正在學習如何撰寫程式碼,Git 都非常有用。 如果您不熟悉 Git,https://git-scm.com/ 網站是很好的起點。 在那裡,您可以在找到速查表、熱門的線上書籍和 Git 基本概念影片。
若要將程式代碼與 Git 產生關聯,您一開始會建立程式代碼所在的新 Git 存放庫。 方法如下:
在 Visual Studio 右下角的狀態列中,選取 [新增至原始程式碼控制],然後選取 [Git]。
在 [建立 Git 存放庫] 對話方塊中,登入 GitHub。
存放庫名稱會根據您的資料夾位置自動填入。 根據預設,您的新存放庫是私人的,這表示您是唯一可以存取它的人員。
提示
無論您的存放庫是公用還是私人,最好有程式碼的遠端備份安全地儲存在 GitHub 上。 即使您未與小組合作,遠端存放庫仍可讓您從任何電腦使用您的程式碼。
選取 [建立並推送]。
建立存放庫之後,狀態詳細數據會出現在狀態欄中。
第一個具有箭號的圖示會顯示您的最新分支中有多少個傳出/傳入認可。 您可以使用此圖示來提取任何傳入認可或推送任何傳出認可。 您也可以選擇先檢視這些認可。 若要這樣做,請選取圖示,然後選取 [檢視傳出/傳入]。
具有鉛筆的第二個圖示會顯示程式碼未認可的變更數目。 您可以選取此圖示,在 [Git 變更] 視窗中檢視這些變更。
若要深入了解如何搭配您的應用程式使用 Git,請參閱 Visual Studio 版本控制文件。
完成的應用程式
恭喜! 您已完成計算機應用程式的程式代碼、建置並對其進行偵錯,並將它新增至存放庫,全部都在Visual Studio中。
下一步
C++ 程式設計人員的一般起點是命令行上執行的 “Hello, world!” 應用程式。 您從本文開始,然後我們繼續進行更具挑戰性的內容:計算機應用程式。
必要條件
- 已安裝 C++ 工作負載並在電腦上執行的桌面開發 Visual Studio。 若要安裝,請參閱 在 Visual Studio 中安裝 C++ 支援。
建立您的應用程式專案
Visual Studio 會使用 專案 來組織應用程式的程式代碼,以及 組織一或多個項目的解決方案 。 專案包含用來建置應用程式的所有選項、組態和規則。 它也會管理所有專案之檔案與任何外部檔案間的關聯性。 若要建立您的應用程式,請先建立新的專案和方案。
在 Visual Studio 的功能表欄上,選取 [檔案>新>專案]。 [新增專案] 視窗隨即開啟。
在左邊的側邊欄上,確認已選取 [Visual C++]。 在中央,選取 [Windows 控制台應用程式]。
在底部的 [ 名稱 ] 文本框中,將新專案 命名為 CalculatorTutorial,然後選取 [ 確定]。
系統會建立空的 C++ Windows 控制台應用程式 'Hello World' 應用程式。 主控台應用程式會使用 Windows 主控台視窗來顯示輸出並接受使用者輸入。 在 Visual Studio 中,一個編輯器視窗隨即開啟,並顯示產生的程式碼:
// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> int main() { std::cout << "Hello World!\n"; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
驗證您新的應用程式可以建置及執行
新 Windows 主控台應用程式範本會建立一個簡單的 C++ "Hello World" 應用程式。 此時,您會看到 Visual Studio 如何直接從 IDE 建置及執行您建立的應用程式。
若要建置專案,請從 [建置] 功能選取 [建置方案]。 [輸出] 視窗會顯示建置過程的結果。
若要執行程式代碼,請在功能表欄上選取 [偵錯]、 [啟動但不偵錯 ] (Ctrl+F5)。
主控台視窗會隨即開啟並執行您的應用程式。
當您在 Visual Studio 中啟動主控台應用程式時,它會執行您的程式碼,然後印出「按任意鍵即可關閉此視窗」。 . 。“ 可讓您有機會查看輸出。
恭喜! 您已在 Visual Studio 中建立第一個 “Hello, world!” 控制台應用程式!
請按任意鍵關閉主控台視窗並返回 Visual Studio。
您現在已具備了在每一項變更之後建置及執行您應用程式的工具,可驗證程式碼仍依照您預期的方式運作。 稍後,我們會示範如何偵錯它,如果它沒有。
編輯程式碼
現在,讓我們將此範本中的程式代碼變成計算機應用程式。
將檔案的內容
CalculatorTutorial.cpp
取代為下列程序代碼,使其符合此範例:// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> using namespace std; int main() { cout << "Calculator Console Application" << endl << endl; cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl; return 0; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
了解程式碼:
#include
陳述式可讓您參考位於其他檔案中的程式碼。 有時候,您可能會看到檔案名稱以角括弧 (<>) 括住;其他時候,則會以引號 (" ") 括住。 一般情況下,角括弧會在參考 C++ 標準程式庫時使用,引號則用於其他檔案。using namespace std;
這一行則會告知編譯器,預期在此檔案中使用來自 C++ 標準程式庫的功能。 如果沒有這一行,連結庫中的每個關鍵詞必須前面加上std::
,才能表示其範圍。 例如,若沒有該行,每個對cout
的參考都必須寫成std::cout
。 新增using
陳述式的目的是為了讓程式碼看起來更乾淨。cout
關鍵字則用於印出至 C++ 中的標準輸出。 *<<
運算符會指示編譯程式將任何內容傳送至標準輸出右邊。- 關鍵詞
endl
就像 Enter 鍵;它會結束這一行,並將游標移至下一行。 最好是將 放在\n
字串內(包含""
)以執行相同動作,因為endl
一律會排清緩衝區,而且可能會損害程式的效能。 但是,由於這是一個非常小的應用程式,endl
因此會改為用於更好的可讀性。 - 所有 C++ 陳述式都必須以分號結尾,且所有的 C++ 應用程式都必須包含一個
main()
函式。 此函式是程式在開始時執行的部分。 所有程式碼都必須要能夠從main()
存取,才能使用。
若要儲存盤案,請按 Ctrl+S,或選取 IDE 頂端附近的 [儲存 ] 圖示,功能表欄下工具列中的磁碟片圖示。
若要執行應用程式,請按 Ctrl+F5 或移至 [偵 錯] 功能表,然後選取 [ 啟動但不偵錯]。 如果您收到顯示此專案已過期的彈出視窗,您可以選取 [不要再顯示此對話框],然後選取 [是] 來建置您的應用程式。 您應該會看到一個主控台視窗出現,它顯示程式碼中指定的文字。
首先會出現對話框,詢問是否要建置,因為專案已過期。 已選取 [不要再次顯示此對話框] 的複選框。 選取 [是] 以建置專案、計算機專案建置,然後在 Windows 控制台視窗中啟動。
當您完成時,請關閉主控台視窗。
新增程式碼來執行數學運算
類別就像是物件的藍圖,可進行某些操作。 在此情況下,我們會定義計算機類別來包含數學邏輯。
新增 Calculator 類別
移至 [ 專案] 功能表,然後選取 [新增類別]。 在 [類別名稱] 編輯方塊中,輸入 Calculator。 選取 [確定]。
類別就像是物件的藍圖,可進行某些操作。 在此案例中,我們會定義一個計算機及其運作的方式。
會將兩個新檔案新增到您的專案。 若要一次儲存您所有變更的檔案,請按 Ctrl+Shift+S。 它是 [檔案]>[全部儲存] 的鍵盤快速鍵。 [全部儲存] 也有一個工具列按鈕,即兩個磁碟片的圖示,您可在 [儲存] 按鈕的旁邊找到。 一般情況下,頻繁地進行 [全部儲存] 是良好的做法,因為這樣可避免您在儲存時遺漏任何檔案。
[ 新增類別 精靈] 會
.h
建立 與 類別同名的檔案.cpp
。 您可以在 IDE 側邊可看到的 [方案總管] 視窗中,看見您專案檔案的完整清單。 如果看不到視窗,您可以從功能表列開啟視窗:選取 [檢視> 方案總管]。計算機教學課程專案具有頭文件節點,其中包含 Calculator.h、stdafx.h 和 targetver.h。 來源檔案節點包含Calculator.cpp、CalculatorTutorial.cpp和stdafx.cpp。 可看見參考、外部相依性和資源文件的節點,但已關閉。
您可以在 方案總管 視窗中按兩下檔案,以開啟檔案。 按兩下
Calculator.h
以開啟它。將 的內容
Calculator.h
取代為下列程式代碼,讓檔案現在看起來像這樣:#pragma once class Calculator { public: double Calculate(double x, char oper, double y); };
了解程式碼
- 此程式代碼會宣告名為
Calculate
的新函式,我們用來執行數學運算,以進行加法、減法、乘法和除法。 - C++ 程式代碼會組織成 標頭 (
.h
) 檔案和 來源 (.cpp
) 檔案。 各種編譯器還支援數種其他副檔名,但這些是您需了解的主要項目。 函式和變數通常會經過「宣告」,即在標頭檔中提供名稱和型別,然後在來源檔案中「實作」(或提供定義)。 若要存取另一個檔案中定義的程式代碼,您可以使用#include "filename.h"
,其中filename.h
是宣告您要使用的變數或函式的檔名。 - 將您的程式碼根據其用途整理成不同檔案是一種良好做法,因為這可讓您在稍後需要的時候輕易地尋找它們。 在我們的案例中,我們將
Calculator
類別與包含main()
函式的檔案分開來定義,但我們計劃在main()
中參考Calculator
類別。
- 此程式代碼會宣告名為
綠色波浪線會出現在 下方
Calculate
,因為雖然已宣告函Calculate
式,但並未定義。 將滑鼠停留在Calculate
上方,按兩下出現的螺絲起子上的向下箭號,然後在中Calculator.cpp
選取 [建立 'Calculate' 的定義]。 快顯視窗隨即出現,可讓您預覽在其他檔案中進行的程式碼變更。 程式代碼已新增至Calculator.cpp
。目前,它只會傳回 0.0。 讓我們改變這點。 按 Esc 來關閉快顯視窗。
切換至
Calculator.cpp
編輯器視窗中的檔案。 以下列程式碼來取代 檔案的內容:#include "Calculator.h" double Calculator::Calculate(double x, char oper, double y) { switch(oper) { case '+': return x + y; case '-': return x - y; case '*': return x * y; case '/': return x / y; default: return 0.0; } }
了解程式碼
Calculate
函式會取用一個數字、一個運算子及第二個數字,然後在數字上執行所要求的運算。- Switch 陳述式會檢查提供的運算子為何,並只執行對應至該運算的案例。 default: 案例是一種後援案例,若使用者鍵入不接受的運算子,即會使用此案例以避免中斷程式。 一般情況下,使用更簡潔的方式處理無效使用者輸入會是最佳做法,但這不在本教學課程的範圍內。
double
關鍵字表示支援小數點的一種數字類型。 如此一來,計算機便能夠同時處理小數點及整數的數學運算。Calculate
函式必須一律傳回這種數字,因為程式碼開頭的double
(表示函式的傳回型別) 如此要求,而這也是為什麼即使在預設案例中,我們也傳回 0.0。- 檔案
.h
會宣告函 式原型,其會事先告知編譯程式需要哪些參數,以及預期其傳回類型。 檔案.cpp
具有函式的所有實作詳細數據。
如果您此時再次建置並執行程式碼,其仍會在詢問要執行哪項作業後結束。 接下來,修改 函 main
式以執行一些計算。
呼叫 Calculator 類別成員函式
現在讓我們在 中
CalculatorTutorial.cpp
更新 函main
式:// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include "Calculator.h" using namespace std; int main() { double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout << "Calculator Console Application" << endl << endl; cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl; Calculator c; while (true) { cin >> x >> oper >> y; result = c.Calculate(x, oper, y); cout << "Result is: " << result << endl; } return 0; }
了解程式碼
- 由於 C++ 程式一律會從
main()
函式開始,而我們需要從該處呼叫我們的其他程式碼,因此需要#include
陳述式。 - 我們宣告了某些初始變數
x
、y
、oper
和result
,分別用來儲存第一個數字、第二個數字、運算子及最終結果。 最好給他們一些初始值,以避免未定義的行為,這就是這裡完成的工作。 Calculator c;
這一行會宣告一個名為 'c' 的物件,作為Calculator
類別的執行個體。 類別本身只是計算機運作的藍圖;物件則是進行數學運算的特定計算機。while (true)
陳述式是一種迴圈。 只要()
內的條件為 True,迴圈內的程式碼就會繼續重複執行。 由於此處條件直接列為true
,代表條件一律為 True,因此這個迴圈會永遠執行下去。 若要關閉程式,使用者必須手動關閉主控台視窗。 否則,程式一律都會等待新的輸入。cin
關鍵字則用於接受使用者的輸入。 假設使用者輸入符合必要規格,輸入串流便能處理在主控台視窗中輸入的文字行,並依序將它放在每個列出的變數內。 您可以修改這一行以接受不同類型的輸入,例如兩個以上的數字,不過Calculate()
函式也需要更新才能處理此作業。c.Calculate(x, oper, y);
運算式會呼叫先前定義的Calculate
函式,並提供輸入的輸入值。 函式接著會傳回儲存在result
中的數字。- 最後,
result
會印出到主控台,讓使用者看見運算的結果。
- 由於 C++ 程式一律會從
再次建置並測試程式碼
再次測試程式,以確保一切正常運作。
請按 Ctrl+F5 來重新建置並啟動應用程式。
輸入
5+5
,然後按 Enter。 驗證結果為 10。
偵錯應用程式
由於使用者可以在主控台視窗中輸入任何專案,因此讓我們確定計算機會處理非預期的輸入。 讓我們不要執行程式,而是進行偵錯,因此我們可以檢查其執行逐步執行的內容。
在調試程式中執行應用程式
在
CalcuatorTutorial.cpp
中,設定行上的result = c.Calculate(x, oper, y);
斷點。 若要設定中斷點,請按一下編輯器視窗左邊緣灰色垂直列中的行。 此時會出現一個紅點。現在,當我們偵錯程式時,它會一律在該行暫停執行。 我們已初步了解程式適用於簡單案例。 因為我們不想要每次都暫停執行,讓我們把中斷點設定為選擇性。
以滑鼠右鍵按兩下代表斷點的紅點,然後選取 [ 條件]。 在條件的編輯方塊中,輸入
(y == 0) && (oper == '/')
。 當您完成儲存斷點條件時,請選取 [ 關閉 ] 按鈕。斷點位於行上:result = c dot Calculate (x, oper, y)。 '條件...'在斷點下拉式清單中選取 ,這會開啟斷點設定視窗。 核取 [條件] 選項,下拉式清單會設定為:'條件表達式' 和 'Is true'。 用戶在條件文本框中輸入 y == 0 && oper == '/',然後選取接近以設定條件斷點。
現在我們會在使用者嘗試除以 0 時在中斷點上暫停執行。
若要偵錯程式,請按 F5,或選取 具有綠色箭號圖示的 [本機 Windows 調試程式] 工具列按鈕。 在您的主控台應用程式中,若您輸入像是 "5 - 0" 的內容,程式會正常運作並繼續執行。 但是,若您鍵入 "10 / 0",它便會在中斷點暫停。 您甚至可以在運算子及數字間輸入任意數量的空格,因為
cin
能夠適當地剖析輸入。用戶輸入 5 - 0。 應用程式輸出:結果為 5。 然後,使用者輸入 10/0,而且因為符合條件斷點的條件,所以會在行上停止執行:result = c.Calculate(x,oper,y):
偵錯工具中有用的視窗
當您對程式代碼進行偵錯時,您可能會注意到會出現一些新的視窗。 這些視窗可協助您的偵錯體驗。 讓我們看看 [自動變數] 視窗。 [自動變數] 視窗會顯示從至少 3 行以前到目前這一行為止,所使用變數目前的值。
oper 的值是 47 '/',結果為 5、x 為 10,而 y 為 0。
若要查看來自該函式的所有變數,請切換到 [區域變數] 視窗。 您可以在偵錯時修改這些變數的值,以查看它們對程式有何影響。 在此案例中,我們會讓他們獨自離開。
oper 的值是 47 '/',結果為 0、x 為 10,而 y 為 0。
您也可以將滑鼠停留在程式碼本身的變數上方,以查看其目前暫停執行的值。 請按一下編輯器視窗,確認該視窗仍擁有焦點。
繼續偵錯
左邊的黃色箭號會顯示目前的執行點。 目前的行會呼叫
Calculate
,因此請按 F11 以 逐步執行 函式,這會帶您進入函式的Calculate
主體。 請小心逐步 執行, 因為它會逐步執行您所上行的任何函式,包括標準連結庫函式。 您可以逐步執行標準連結庫,但您可能更有興趣專注於您的程序代碼,而不是連結庫程序代碼。現在當執行點位於
Calculate
函式的開頭時,請按 F10 來移動到程式執行的下一行。 F10 又稱為 [不進入函式]。 您可以使用 [不進入函式] 來從一行移動到下一行,而無須了解該行每個部分所發生的事件。 一般情況下,建議您使用 [不進入函式] 而非 [逐步執行],除非您想要更深入地了解從其他位置呼叫的程式碼 (如同您為了觸達Calculate
主體所進行的操作)。繼續使用 F10 以不進入每一行函式,直到您回到另一個檔案的
main()
,並在cout
行上停止。Calculate 函式中的每一行程式代碼都會逐步執行,直到控件傳回 main 函式為止。 然後,使用者將滑鼠停留在具名結果的變數上,以查看其值,也就是:inf。
程式正在執行預期的工作:它會採用第一個數位,並將它除以第二個數位。 在
cout
行上,在result
變數上暫留或在 [自動變數] 視窗中查看result
。 其值為inf
,看起來不對,因此讓我們修正它。cout
行只會輸出任何儲存在result
中的值,因此當您使用 F10 前往下一行時,會顯示主控台視窗:應用程式輸出:請輸入要執行的作業。 格式:a+b |a-b |a*b |a/b. 用戶輸入 5-0。 應用程式輸出:結果為:5。 THe 使用者輸入 10/0。 應用程式輸出:結果為:inf
此結果是因為零除為未定義,因此程序沒有所要求作業的數值答案。
修正「除以零」錯誤
讓我們更正常地處理除法,讓使用者更容易了解問題。
在
CalculatorTutorial.cpp
中進行下列變更。 (您可以讓程式在編輯時繼續執行,這要歸功於稱為 的調試程式功能編輯後繼續)。 變更是新增if
下列cin >> x >> oper >> y;
語句,以檢查除法是否為零,並在發生時將訊息輸出給使用者。 否則,會列印結果:// CalculatorTutorial.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> #include "Calculator.h" using namespace std; int main() { double x = 0.0; double y = 0.0; double result = 0.0; char oper = '+'; cout << "Calculator Console Application" << endl << endl; cout << "Please enter the operation to perform. Format: a+b | a-b | a*b | a/b" << endl; Calculator c; while (true) { cin >> x >> oper >> y; if (oper == '/' && y == 0) { cout << "Division by 0 exception" << endl; continue; } else { result = c.Calculate(x, oper, y); } cout << "Result is: " << result << endl; } return 0; }
按 F5 一次。 程式會繼續執行,直到需要暫停要求使用者輸入為止。 再次輸入
10 / 0
。 現在會印出更有幫助的訊息。 程式會向使用者要求更多輸入,且程式會繼續正常執行。注意
當您在處於偵錯模式的期間編輯程式碼時,可能會有程式碼過時的風險。 這會在偵錯工具仍在執行您的舊版程式碼,且尚未使用您的變更進行更新時發生。 偵錯工具會在發生此情況時彈出一個對話方塊提醒您。 有時候,您可能需要按 F5 來重新整理正在執行的程式碼。 特別是,如果您在函式內執行點位於該函式內時進行變更,請從函式中跳出,然後再回到函式,以取得更新的程序代碼。 若因為某些原因仍無法正常運作,且您看到了錯誤訊息,您可以按一下 IDE 頂端功能表下方工具列中的紅色方塊來停止偵錯,然後按 F5 來再次啟動偵錯,或選擇工具列上停止按鈕旁邊的綠色 [執行] 箭頭來進行。
編輯後繼續可能會失敗的另一個原因是您必須移至主功能表,然後選取 [工具>選項>>偵錯一般],並確定已核取 [要求原始程序檔完全符合原始版本]。
了解執行和偵錯快速鍵
- F5 (或 [偵錯]>[開始偵錯]) 會啟動偵錯工作階段 (若沒有正在使用中的工作階段) 並執行程式,直到到達中斷點或程式需要使用者進行輸入。 若不需要使用者輸入且沒有可到達的中斷點,程式會在完成執行時終止並關閉主控台視窗本身。 如果您有類似要執行的 「Hello World」 程式,請在按下 F5 以保持窗口開啟之前,先使用 Ctrl+F5 或設定斷點。
- Ctrl+F5 (或 [偵錯]>[啟動但不偵錯]) 會執行應用程式,而不會進入偵錯模式。 這比偵錯稍快,且主控台視窗會在程式完成執行時維持在開啟狀態。
- F10 (又稱為 [不進入函式]) 可讓您逐一且逐行查看程式碼,並視覺化程式碼執行方式及每個執行步驟中的變數值為何。
- F11 (又稱為 [逐步執行]) 的運作方式與 [不進入函式] 相似,但它會進入任何在執行行上呼叫的函式。 例如,當執行的行呼叫一個函式時,按 F11 會將指標移動到函式主體,讓您可以跟隨所執行的函式程式碼,然後回到您開始的那一行。 按 F10 可不進入函式,直接移動到下一行;函式仍會獲得呼叫,但程式不會暫停並顯示其正在進行的操作。
關閉應用程式
- 若仍在執行中,請關閉計算機應用程式的主控台視窗。
恭喜! 您已完成計算機應用程式的程式代碼,並在 Visual Studio 中建置並對其進行偵錯。