提问人:Fernando Padilla 提问时间:11/8/2023 更新时间:11/8/2023 访问量:51
输入不断要求更多 [已关闭]
Input keeps asking for more [closed]
问:
上下文:我正在尝试用 C++ 制作一个小程序,要求用户创建一个帐户,然后登录。创建帐户时,它会要求提供角色、用户名和密码。要选择角色,您必须输入整数 1-3。当它要求我担任这个角色时,问题就出现了。我输入一个数字,单击回车键,但仍然允许我输入另一个数字,而不是转到下一部分。所以我总共必须输入 2 个数字,但程序仍在继续。创建帐户后,我尝试登录。它还要求提供角色、用户名、密码。在登录中,它可以完美地工作,但它不允许我登录。我99%确定一定是因为这个问题。不过,它可以是其他任何东西。我不是专家,我才刚刚开始编程。
#include <iostream>
#include <vector>
using namespace std;
struct User // struct User stores username and password
{
string username;
string password;
string role;
};
vector<User> users; // vector User stores user data
void createAccount() // function to create account
{
User user;
cout << "Select your role: " << endl;
cout << "1. Tier I 2. Tier II 3. Tier III" << endl;
int roleChoice; // variable for role selection
cin >> roleChoice; // user selects role by inputing an integer
switch (roleChoice) // switch enables 3 possible roles
{
case 1:
user.role = "Tier I";
break;
case 2:
user.role = "Tier II";
break;
case 3:
user.role = "Tier III";
break;
default:
cout << "Invalid role selected. Try again." << endl; // invalid input
return;
}
cin >> user.role;
cout << "Enter a user name: ";
cin >> user.username;
cout << "Enter a password: ";
cin >> user.password;
users.push_back(user); // push_back user adds a user to the vector User
cout << "Account created successfully!\n";
}
bool login(string& loggedInUser)
{
string username, password, role;
cout << "Select your role:\n";
cout << "1. Tier I 2. Tier II 3. Tier III" << endl;
int roleChoice; // variable for role selection
cin >> roleChoice; // user selects role by inputing an integer
switch (roleChoice) // switch enables 3 possible roles
{
case 1:
role = "Tier I";
break;
case 2:
role = "Tier II";
break;
case 3:
role = "Tier III";
break;
default:
cout << "Invalid role selected. Try again.\n"; // invalid input
return false;
}
cout << "Enter your username: ";
cin >> username;
cout << "Enter your password: ";
cin >> password;
for (const User& user : users) // loop searches for information that matches
{ // const in order to avoid any changes
// verifies that the information inputed is the same
if (user.role == role && user.username == username && user.password == password)
{
loggedInUser = username;
cout << "Login succesful. Welcome, " << loggedInUser << " (" << role << ")\n ";
return true; // if information is correct, user logs in
}
}
cout << "Login failed. Invalid role, username, or password.\n";
return false;
}
int main()
{
string loggedInUser;
int choice;
do // user chooses to create account, login, or exit
{
cout << "1. Create account\n2. Login\n3. Exit\n";
cin >> choice;
switch (choice)
{
case 1:
createAccount();
break;
case 2:
if (login(loggedInUser))
{
cout << "Welcome, " << loggedInUser << "!\n";
int loggedInChoice;
do {
std::cout << "1. Perform action 1\n2. Perform action 2\n3. Logout\nEnter your choice: ";
std::cin >> loggedInChoice;
switch (loggedInChoice)
{
case 1:
// Implement action 1.
std::cout << "Action 1 performed.\n";
break;
case 2:
// Implement action 2.
std::cout << "Action 2 performed.\n";
break;
case 3:
std::cout << "Logged out. Goodbye!\n";
break;
default:
std::cout << "Invalid choice. Please try again.\n";
break;
}
} while (loggedInChoice != 3);
}
break;
case 3:
cout << "Goodbye!\n";
break;
default:
cout << "Invalid choice. Try again.\n";
break;
}
} while (choice != 3);
return 0;
}
答:
-1赞
Shreeyash Shrestha
11/8/2023
#1
在代码的这一部分中:
void createAccount() // function to create account
{
User user;
cout << "Select your role: " << endl;
cout << "1. Tier I 2. Tier II 3. Tier III" << endl;
int roleChoice; // variable for role selection
cin >> roleChoice; // user selects role by inputing an integer
switch (roleChoice) // switch enables 3 possible roles
{
case 1:
user.role = "Tier I";
break;
case 2:
user.role = "Tier II";
break;
case 3:
user.role = "Tier III";
break;
default:
cout << "Invalid role selected. Try again." << endl; // invalid input
return;
}
cin >> user.role;
cout << "Enter a user name: ";
cin >> user.username;
cout << "Enter a password: ";
cin >> user.password;
users.push_back(user); // push_back user adds a user to the vector User
cout << "Account created successfully!\n";
}
您已经请求了角色选择,然后根据用户的输入进行了分配。
然后你放一个 ,正如你所猜到的,它第二次要求用户提供该选项。 cin >> user.role;
由于(例如)您在第一次尝试时按了 1,因此 的值将是 I 层。user.role
但是,由于您在第二次尝试时再次按 1,因此 的值将为 1。因为您通过第二个输入为其分配了 1。这就是你在程序上得到整个错误的方式。user.role
因此,您需要做的就是删除代码的那部分,即从程序中删除,它将起作用。 cin >> user.role;
告诉我它是否有效!!
评论
0赞
Fernando Padilla
11/9/2023
哇,我觉得自己好傻。你是对的,我没有注意到我在问用户两次。这些小错误让我在编程中发疯。非常感谢,该程序现在可以运行,并且只询问用户一次。
评论
cin >> user.role
user