获取用户输入时的错误处理 我是C++初学者,我有一个小问题:

获取用户输入时的错误处理 我是C++初学者,我有一个小问题:,c++,C++,“我的代码”向用户显示一个简单的菜单,提供三个选项: cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: "; cout << "\n <r> Give new coefficients"; cout << "\n <c> Calculate equations solutions"; cout << "\n <t> Termin

“我的代码”向用户显示一个简单的菜单,提供三个选项:

cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: "; 
cout << "\n <r>  Give new coefficients"; 
cout << "\n <c>  Calculate equations solutions"; 
cout << "\n <t>  Terminate the program";
无法输入无效的输入,请重试
  • 1或任何其他数字->输入的输入无效,请重试
  • rt->输入的输入无效,请重试 (此处第一个字符是正确的,但他输入了2个字符)
  • cf->输入的输入无效,请重试
  • 只有在用户正确输入3个简单字符(r、c、t非敏感大小写)中的一个来做某事时,否则应打印无效输入的信息,然后再次出现主菜单

    我试过这个,但不起作用:

    char displayMainMenu()
    {
    char mainMenuChoice;
    cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: "; 
    cout << "\n <r>  Give new coefficients"; 
    cout << "\n <c>  Calculate equations solutions"; 
    cout << "\n <t>  Terminate the program";
    cout<<"Enter choice : ";
    cin>>mainMenuChoice;
    return mainMenuChoice;
    }
    
    int main()
    {
    bool done = false;
    while(!done)
    {
        char choice = displayMainMenu();  
    
        if( isalpha(choice) )
        {
    
            switch(tolower(choice))
            {
            case 'r':
                DoSTH1();
                break;
            case 'c':
                DoSTH2();
                break;  
            case 't':
                DoSTH3();                   
                break;
            default:
                cout<<"Invalid choice!\n"<<endl;
            }   
    
        }
    
    }
    return 0;
    }
    
    char displayMainMenu()
    {
    char mainMenuChoice;
    不能改变这一行:

    cout<<"Enter choice : " << std::endl;
                        // ^^^^^^^^^^^^^^^
    
    更改此行:

    cout<<"Enter choice : " << std::endl;
                        // ^^^^^^^^^^^^^^^
    

    首先,省略
    if(isalpha(choice))
    。它不是必需的,因为除了
    r
    c
    t
    之外的任何输入都将属于
    默认值

    实际上,这可能是问题的原因。如果输入的字符不是字母数字,则函数将在不显示错误消息的情况下结束


    总的来说,我的建议是:不要想得太复杂。切换的美妙之处在于,你可以根据精确的匹配进行操作,而所有其他操作都会变成默认值。首先,省略
    if(isalpha(选项))
    。这是不需要的,因为除了
    r
    c
    t
    之外的任何输入都将属于
    默认值

    实际上,这可能是问题的原因。如果输入的字符不是字母数字,则函数将在不显示错误消息的情况下结束

    总的来说,我的建议是:不要想得太复杂。开关的美妙之处在于,你可以根据精确的匹配进行操作,其他所有开关都会被默认设置为“我试过了,但它不起作用”是什么意思?你得到了什么输出?你是说它没有编译吗?(它不会处于你显示的状态).你的意思是,程序比我们看到的要多,但它产生了意想不到的结果?我们没有足够的时间来调试它。值得一提的是,我没有看到任何错误(除了它显然不完整):

    #包括
    使用名称空间std;
    char displayMain菜单(){
    char mainMenuChoice;
    cout什么是“我试过了,但它不起作用”的意思?你得到了什么输出?你是说它没有编译吗?(它不会在你显示它的状态下).你的意思是,程序比我们看到的要多,但它产生了意想不到的结果?我们没有足够的时间来调试它。值得一提的是,我没有看到任何错误(除了它显然不完整):

    #包括
    使用名称空间std;
    char displayMain菜单(){
    char mainMenuChoice;
    cout要通过被接受为“c”的“cbbb”,您必须使用getline()读入一行。然后您可以检查是否只输入了一个字符,然后检查输入了哪个字符

    如果您使用cin读取字符,它将只读取输入流中可用的第一个字符。

    要通过被接受为“c”的“cbbb”,您必须改为使用getline()读取一行。然后您可以检查是否只输入了一个字符,然后检查输入了哪个字符

    如果使用cin读取字符,它将只读取输入流中可用的第一个字符

    // if( isalpha(choice) )
    
    #include <iostream>
    using namespace std;
    
    char displayMainMenu() {
        char mainMenuChoice;
        cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: ";
        cout << "\n <r>  Give new coefficients";
        cout << "\n <c>  Calculate equations solutions";
        cout << "\n <t>  Terminate the program";
        cout<<"\nEnter choice : ";
        cin>>mainMenuChoice;
        return mainMenuChoice;
    }
    
    int main() {
        bool done = false;
        while(!done) {
            char choice = displayMainMenu();
    
            if( isalpha(choice) ) {
    
                switch(tolower(choice))
                {
                case 'r':
                        cout << "got 'r'\n";
                        break;
                case 'c':
                        cout << "got 'c'\n";
                        break;
                case 't':
                        cout << "got 't'\n";
                        done = true;
                        break;
                default:
                        cout<<"Invalid choice!\n"<<endl;
                }
            }
        }
        return 0;
    }
    
    ~ $ g++ input.cc -o input
    ~ $ ./input
    
    Quadratic equation: a*X^2 + b*X + c = 0 main menu:
     <r>  Give new coefficients
     <c>  Calculate equations solutions
     <t>  Terminate the program
    Enter choice : a
    Invalid choice!
    
    
    Quadratic equation: a*X^2 + b*X + c = 0 main menu:
     <r>  Give new coefficients
     <c>  Calculate equations solutions
     <t>  Terminate the program
    Enter choice : c
    got 'c'
    
    Quadratic equation: a*X^2 + b*X + c = 0 main menu:
     <r>  Give new coefficients
     <c>  Calculate equations solutions
     <t>  Terminate the program
    Enter choice : t
    got 't'
    ~ $