以下是添加了詳細代碼注釋的版本:
```cpp
#include <iostream>using namespace std;定義加法函數(已注釋掉)
//int add(int a, int b) {
// ? ?return a + b;
//}定義減法函數(已注釋掉)
//int min(int a, int b) {
// ? ?return a - b;
//}定義乘法函數(已注釋掉)
//int mul(int a, int b) {
// ? ?return a * b;
//}定義除法函數(已注釋掉)
//double diliv(int a, int b) {
// ? ?if (b == 0) { // 檢查除數是否為零
// ? ? ? ?cout << "錯誤:除數不能為零!" << endl;
// ? ? ? ?return 0; // 返回 0 表示錯誤
// ? ?}
// ? ?return (double)a / b; // 返回浮點數結果
//}// 定義一個通用的計算器函數,接受兩個整數和一個函數指針作為參數
int calculator(int a, int b, int(*p)(int a, int b)) {cout << "開始計算" << endl;// 這里可以調用傳入的函數指針進行計算// 示例:return p(a, b);
}int main() {int a = 0; // 第一個操作數int b = 0; // 第二個操作數char cal; // 用戶輸入的運算符string continueChoice; // 用戶選擇是否繼續的標志// 使用 Lambda 表達式定義加法、減法、乘法和除法操作auto add = [](int a, int b)->int { return a + b; }; // 加法auto minu = [](int a, int b)->int { return a - b; }; // 減法auto mul = [](int a, int b)->int { return a * b; }; // 乘法auto diliv = [](int a, int b)->double {?if (b == 0) { // 檢查除數是否為零cout << "錯誤:除數不能為零!" << endl;return 0; // 返回 0 表示錯誤}return (double)a / b; // 返回浮點數結果};while (true) { // 無限循環,直到用戶選擇退出// 獲取用戶輸入的兩個數字cout << "請輸入兩個數:" << endl;cin >> a;cin >> b;// 獲取用戶輸入的運算符cout << "請輸入運算符 (+, -, *, /):" << endl;cin >> cal;// 根據用戶輸入的運算符執行相應的計算switch (cal) {case '+': // 加法cout << "結果: " << add(a, b) << endl; // 調用 Lambda 表達式的加法函數break;case '-': // 減法cout << "結果: " << minu(a, b) << endl; // 調用 Lambda 表達式的減法函數break;case '*': // 乘法cout << "結果: " << mul(a, b) << endl; // 調用 Lambda 表達式的乘法函數break;case '/': // 除法cout << "結果: " << diliv(a, b) << endl; // 調用 Lambda 表達式的除法函數break;default: // 無效運算符cout << "無效的運算符!" << endl;break;}// 詢問用戶是否繼續計算cout << "是否繼續計算?(y/n): ";cin >> continueChoice;// 如果用戶輸入的不是 'y' 或 'Y',則退出循環if (continueChoice != "y" && continueChoice != "Y") {break; // 退出循環}}cout << "程序已退出。" << endl; // 提示程序結束return 0; // 返回 0 表示程序正常結束
}
```
### **代碼注釋說明**
1. **函數定義部分**:
? ?- 被注釋掉的函數(如 `add`, `min`, `mul`, `diliv`)是傳統方式定義的函數。
? ?- 通過 Lambda 表達式重新實現了這些功能,使代碼更加簡潔。
2. **Lambda 表達式**:
? ?- Lambda 表達式是一種匿名函數,可以直接在需要的地方定義并使用。
? ?- 例如,`auto add = [](int a, int b)->int { return a + b; };` 定義了一個加法操作。
3. **主循環**:
? ?- 使用 `while (true)` 實現無限循環,直到用戶選擇退出。
? ?- 在每次循環中,獲取用戶輸入的兩個數字和運算符,并根據運算符執行相應的計算。
4. **錯誤處理**:
? ?- 在除法操作中,檢查除數是否為零,避免程序崩潰。
? ?- 如果用戶輸入無效運算符,提示“無效的運算符!”。
5. **用戶交互**:
? ?- 每次計算結束后,詢問用戶是否繼續。
? ?- 如果用戶輸入 `n` 或 `N`,程序會退出循環并結束運行。
6. **退出機制**:
? ?- 通過 `break` 語句跳出循環,實現程序的優雅退出。
---
### **總結**
這段代碼通過 Lambda 表達式簡化了函數定義,并提供了清晰的用戶交互邏輯。代碼注釋詳細地解釋了每個部分的功能,方便閱讀和維護。如果你還有其他問題或需要進一步優化,請隨時提問!