我是C ++的新手,并不能真正解决这个问题。我尝试了几件事,但我觉得我只是缺少一些简单的东西。
我有这个控制台应用程序,用户输入预定义的密码。如果密码不正确,则会提示他们重新输入密码。如果密码正确,只是结束程序,但我希望它说“授予访问权限!”然后结束
我遇到的另一个问题是,当输入多个单词作为密码时,会为每个单词打印“拒绝访问”。
string password;
cout << "Please enter the password!" << endl;
cin >> password;
if (password == "test") {
cout << "Access granted!";
} else {
do {
cout << "Access denied! Try again." << endl;
cin >> password;
} while (password != "test");
}
return 0;
您需要在循环退出后输出"Access granted"
消息,并且还需要在每次尝试丢弃仍然等待读取的任何单词失败后清除stdin输入:
#include <limits>
string password;
cout << "Please enter the password!" << endl;
cin >> password;
if (password == "test") {
cout << "Access granted!";
} else {
do {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Access denied! Try again." << endl;
cin >> password;
} while (password != "test");
cout << "Access granted!";
}
return 0;
哪个会更好地写成这样:
#include <limits>
string password;
cout << "Please enter the password!" << endl;
do {
cin >> password;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
if (password == "test") break;
cout << "Access denied! Try again." << endl;
}
while (true);
cout << "Access granted!";
return 0;
但请注意,operator>>
一次只能读取1个单词,因此"test I GOT IN!"
之类的内容也会被接受。您应该使用std::getline()
来一次读取整行,而不是一次读取一个单词:
#include <limits>
string password;
cout << "Please enter the password!" << endl;
do {
getline(cin, password);
if (password == "test") break;
cout << "Access denied! Try again." << endl;
}
while (true);
cout << "Access granted!";
return 0;