#include <iostream>
#include <string>
#ifndef en
#define en std::endl
#endif
using namespace std;
int login() {
//Basic login program
login:
string correctPass = "Love";
string attemptPass;
cout << "Please insert password" << en;
cin >> attemptPass;
if (attemptPass == correctPass) {
cout << "Access Granted" << en << en;
} else {
goto login;
}
return 0;
}
int main() {
// Everything below is main menu crap that I want to turn into a function that somehow allows goto statements
login();
mainMenu:
cout << en << "MAIN MENU" << en << en << "Payroll" << en << "Employees" << en << en;
string mainMenuOption;
cin >> mainMenuOption;
if (mainMenuOption == "Payroll" || "payroll") {
goto payroll; }
else if (mainMenuOption == "Employees" || "employees") {
goto employees; }
else {
goto mainMenu; }
payroll:
cout << "Fish";
return 0;
employees:
cout << "Eleven";
return 0;
}
基本的にメインメニューであるmainの部分を、何とかgotoを保持する関数に変えたいと思います。これはどうすればいいですか?私は、gotoと関数がうまく連携していないことを理解していますが、少なくとも同じものに近い別の方法がありますか?同様にlogin
機能(及び、中goto
を取り除くために、またgotoステートメントを含むメインメニュー関数を作成するには?
enum choice { payroll, employees, quit };
choice main_menu() {
/* whatever */
return users_choice;
}
int main() {
bool done = false;
while (!done) {
switch(main_menu()) {
case payroll: do_payroll(); break;
case employees: do_employees(); break;
case quit: done = true; break;
}
}
return 0;
}
:
コードに 'goto'を使用しないでください。必要な場合があるかもしれませんが、これは一つではありません。 'goto'の代わりにループと関数を使用してください。 – NathanOliver
些細なイニシャライザやデストラクタを飛び越えるゴモは災害のためのレシピです。 –
'std :: endl'が行う余分なものを必要としない限り、' en'の定義を '#define en '\ n''に変更してください。 –