【发布时间】:2021-12-26 15:15:16
【问题描述】:
#include <iostream>
#include <regex>
using namespace std;
void main_menu();
int get_user_input();
void select_menu_item(int input);
void print_main_menu();
void go_back_to_main_menu();
bool is_integer(std::string num);
void menu_item_1();
void menu_item_2();
void menu_item_3();
void menu_item_4();
int main(int argc, char const *argv[]) {
//int num1, num2, choice, i;
main_menu();
return 0;
}
void main_menu() {
char fav;
int num1,num2,choice,i;
cout<<"\n Enter 1st Number: ";
cin>>num1;
cout<<"\n Enter 2nd Number: ";
cin>>num2;
print_main_menu();
int input = get_user_input();
select_menu_item(input);
//void menu_item_1();
}
int get_user_input() {
int input;
std::string input_string;
bool valid_input = false;
int menu_items = 5;
do {
std::cout << "\nSelect item: ";
std::cin >> input_string;
valid_input = is_integer(input_string);
// if input is not an integer, print an error message
if (valid_input == false) {
std::cout << "Enter an integer!\n";
} else { // if it is an int, check whether in range
input = std::stoi(input_string); // convert to int
if (input >= 1 && input <= menu_items) {
valid_input = true;
} else {
std::cout << "Invalid menu item!\n";
valid_input = false;
}
}
} while (valid_input == false);
return input;
}
void select_menu_item(int input) {
switch (input) {
case 1:
menu_item_1();
break;
case 2:
menu_item_2();
break;
case 3:
menu_item_3();
break;
case 4:
menu_item_4();
break;
default:
exit(1);
break;
}
}
void print_main_menu() {
std::cout << "\n----------- Main menu -----------\n";
std::cout << "|\t\t\t\t\t\t|\n";
std::cout << "|\t1. Menu item 1\t\t|\n";
std::cout << "|\t2. Menu item 2\t\t|\n";
std::cout << "|\t3. Menu item 3\t\t|\n";
std::cout << "|\t4. Menu item 4\t\t|\n";
std::cout << "|\t5. Exit\t\t\t\t|\n";
std::cout << "|\t\t\t\t\t\t|\n";
std::cout << "---------------------------------\n";
}
void go_back_to_main() {
std::string input;
do {
std::cout << "\nEnter 'b' or 'B' to go back to main menu: ";
std::cin >> input;
} while (input != "b" && input != "B");
main_menu();
}
// https://codereview.stackexchange.com/questions/162569/checking-if-each-char-in-a-string-is-a-decimal-digit
bool is_integer(std::string num) {
return std::regex_match(num, std::regex("[+-]?[0-9]+"));
}
void menu_item_1() {
int num1, num2, choice, i;
std::cout << "\n>> Menu 1\n";
std::cout << "\n Sum of "<< num1 <<" and "<< num2;
cout << " = "<<num1+num2;
//std::cin>> Menu_item 1;
// you can call a function from here that handles menu 1
go_back_to_main();
}
void menu_item_2() {
std::cout << "\n>> Menu 2\n";
std::cout << "\nSome code here does something useful\n";
// you can call a function from here that handles menu 2
go_back_to_main();
}
void menu_item_3() {
std::cout << "\n>> Menu 3\n";
std::cout << "\nSome code here does something useful\n";
// you can call a function from here that handles menu 3
go_back_to_main();
}
void menu_item_4() {
std::cout << "\n>> Menu 4\n";
std::cout << "\nSome code here does something useful\n";
// you can call a function from here that handles menu 4
go_back_to_main();
}
输出:
Enter 1st Number: 56
Enter 2nd Number: 87
----------- Main menu -----------
| |
| 1. Menu item 1 |
| 2. Menu item 2 |
| 3. Menu item 3 |
| 4. Menu item 4 |
| 5. Exit |
| |
---------------------------------
Select item: 1
>> Menu 1
Sum of 0 and 6596224 = 6596224
Enter 'b' or 'B' to go back to main menu:
我觉得我已经接近让第一个菜单功能正常工作了,但是我无法弄清楚为什么菜单 1 的输出一直返回“0 和 6596224 的总和 = 6596224”。我不确定代码的哪一部分需要重新排列。
我知道我只完成了添加,但是一旦我弄清楚这里出了什么问题,我相信我将能够完成其余的。
谢谢
【问题讨论】:
标签: c++ menu calculator