我是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;
答案 0 :(得分:2)
在循环退出后,您需要输出"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>>
一次只能读取一个单词,因此也将接受"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;