C ++如果用户只按Enter键或输入无效,如何重启循环?

时间:2017-09-11 01:24:56

标签: c++ validation vector

我首先要说我已经为此工作了3天,这只是我的第二学期编程。我知道这个问题对大多数人来说可能很容易,但我的经验很少。

我写的代码除了无效/空白条目验证外,都按预期工作。我找到并试过的任何东西都会破坏代码的其他部分或根本不起作用。

以下是我遇到问题的部分的作业中给出的说明: “菜单的任何无效输入都只会重新显示菜单。 选项1将提示输入userName。空名称将被忽略。

这是我的代码。非常感谢任何帮助。

#include <iostream>
#include <vector>
#include <string>



using namespace std;
vector<string> usernames;
void listMenu();
void addName();
void listNames();
void removeName();

int main()
{

    char entry;
    bool exit = false;

    while (exit == false)
    {

        cout << "Choose from the following menu: \n";
        listMenu();
        cin >> entry;

        if (entry == '\n')
        {
            listNames();
        }

        if (entry == '1')
        {
            addName();
        }
        else if (entry == '2')
        {
            listNames();
        }
        else if (entry == '3')
        {
            removeName();
        }
        else if (entry == 'x' || entry == 'X')
        {
            exit = true;
        }



    } 



    usernames.clear();
    return 0;

}

void listMenu()
{
    string menu[4] = { "1. Add a username","2. List all usernames","3. Delete a username","X. Exit" };

        for (int i = 0; i < 4; i++) {
            cout << menu[i] << endl;
        }

}

void addName()
{
    string name;
    cout << "Enter a username: " << endl;
    cin >> name;    
    usernames.push_back(name);

}

void listNames()
{
    int n = 1;
    cout << "**************\n";
    for (auto& x : usernames)
    {
        cout << n <<". "<< x <<endl;
        n++;
    }
    cout << "**************\n";
}

void removeName()
{
    int x;
    cout << "Which username would you like to remove?\n";
    listNames;
    cin >> x;

    usernames.erase(usernames.begin()+x);
}

1 个答案:

答案 0 :(得分:0)

您可以测试输入,如果输入无效,请将其清除。使用cin.failcin.clearcin.ignore

#include<iostream>  
using namespace std;  

bool cond;  

int main() {  
    int n;  

    do {  
        cout << "Enter an integer number:";  
        cin >> n;  

        cond = cin.fail();  

        cin.clear();  
        cin.ignore(INT_MAX, '\n');  
    } while(cond);  

    return 0;  
}