在do ... while语句满足后输出值到控制台?

问题描述 投票:0回答:1

我是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;
c++ console-application
1个回答
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;

Live Demo

哪个会更好地写成这样:

#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;

Live Demo

但请注意,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;

Live Demo

© www.soinside.com 2019 - 2024. All rights reserved.