私はMicrosoft Visual Studio 2017 Communityを使用しています。どのようにスイッチ機能を使ってプログラムを正しく終了させるのですか?私は、プログラマーはexit()のようなno-noを持っていることを知っています。私はリターン0を使用しようとしました。機能の別れやスイッチのような別の場所では運がなかったのですが、機能やスイッチが終了するだけですが、プログラムを終了したり閉じたりしないという問題があります。また、間違っているかもしれない、あるいはより良くできるかもしれないものについて私を修正することを自由に感じてください。私はC++には本当に新しく、これが私の最初のプログラムです。注:ユーザー名をグローバル変数にしないようにしようとしましたが、いくつかの関数で使用されていましたので、先に進んでグローバル化しました。C++スイッチ機能を使用してプログラムを正しく終了する方法
これは私の例です:
#include <iostream>
#include <string>
#include <fstream>
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//// Switch does not end program on QUIT :( ////
/////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
void welcome();
int options_menu();
void register_username();
std::string register_password();
void save_user(const std::string &password);
void user_login();
void display_file();
void clock_in_hour();
void clock_in_minute();
void clock_out_hour();
void clock_out_minute();
void test();
void goodbye();
std::string username;
template <typename T>
T get_input(const std::string &strQuery)
{
std::cout << strQuery << "\n> ";
T out = T();
while (!(std::cin >> out))
{
std::cin.clear();
std::cin.ignore(std::numeric_limits <std::streamsize>::max(), '\n');
std::cout << "Error!" "\n";
std::cout << strQuery << "\n> ";
}
return out;
}
int main()
{
welcome();
options_menu();
test();
return 0;
}
void welcome()
{
std::cout << "Welcome to the Time Card Calculator Pro V1.0 \n\n";
}
int options_menu()
{
int menu = 0;
std::cout << "Please type an option number and press enter to continue: \n\n";
std::cout << "[1] Register \n";
std::cout << "[2] Login \n";
std::cout << "[3] Quit \n\n";
menu = get_input <int>("Please type an option number and press enter to continue \n");
switch (menu)
{
case 1:
std::cout << "\n";
std::cout << "You chose to register \n\n";
register_username();
break;
case 2:
std::cout << "\n";
std::cout << "You chose to login \n\n";
user_login();
break;
case 3:
std::cout << "\n";
std::cout << "You chose to quit \n\n";
goodbye();
break;
default:
std::cout << "\n";
std::cout << "Error! Invalid option \n\n";
options_menu();
break;
}
}
void register_username()
{
std::string username;
std::cout << "Please enter your full name: "; //ask user to create username...
std::cin.ignore();
std::getline(std::cin, username);
while (get_input <int>("Confirm? [0|1]") != 1)
{
std::cout << "Please enter your full name: ";
std::cin.ignore();
std::getline(std::cin, username);
}
std::ifstream file(username + ".txt"); //check if user file exists...
if (file.is_open())
{
std::cout << "Error! Username already taken \n\n";
options_menu();
}
else //ask user to create a password...
{
register_password();
}
}
std::string register_password()
{
std::cout << "Now please create a password \n";
std::string ask_password = get_input<std::string>("Password may not have any spaces ");
std::string password = get_input<std::string>("Please re-enter the password ");
if (ask_password == password)
{
save_user(password);
}
else
{
std::cout << "Error: Passwords did not match \n";
register_password();
}
return password;
}
void save_user(const std::string &password)
{
std::cout << "Saving user info... \n";
std::ofstream file(username + ".txt");
file << password << "\n";
std::cout << "Username: " << username << "\n";
std::cout << "Password: " << password << "\n";
}
void user_login()
{
std::cout << "Please enter your username ";
std::cin.ignore();
std::getline(std::cin, username);
std::cout << "Searching for file... \n";
std::ifstream file(username + ".txt"); //look for user file...
if (file.is_open()) //if user file is found...
{
std::cout << "File found \n";
display_file();
}
else
{
std::cout << "Error: Username not registered \n";
std::cout << "Please register username \n";
options_menu();
}
}
void display_file()
{
std::string line;
int numberoflines = 0;
std::cout << "Searching for user file " << username << "\n";
std::ifstream file(username + ".txt");
while (std::getline(file, line))
{
std::cout << line << "\n";
numberoflines++;
}
}
void test()
{
std::cout << "This is a test \n";
}
void goodbye()
{
std::cout << "Thank you for using the Time Card Calculator Pro V1.0 \n";
std::cout << "Good bye \n";
}
あなたは大きすぎます。質問を[mcve]に絞ってください。そうすることで、あなた自身の問題を偶然見つけ出すことさえできます。なぜ、ハードコードされた変数と 'switch'を持つ単純な' main() '関数を持っていないのでしょうか?そこから、ユーザーからの入力を取得するように構築します。 – Tas
[C++コンソールプログラムを終了するにはどうすればいいですか?](https://stackoverflow.com/questions/4038302/how-do-i-make-ac-console-program-exit) – philipxy