【问题标题】:Running as infinite loop [duplicate]作为无限循环运行[重复]
【发布时间】:2020-03-06 20:21:59
【问题描述】:

当我尝试调用此函数并为除整数以外的变量等级提供值时,do-while 循环继续执行,甚至不提示输入 char 类型的变量。请帮我弄清楚为什么循环继续执行。

//User Input function
int userInput(){
    int grade,question;
    char choice='y';
    srand(time(0));
    do{
        //displayMenu();
        cout<<endl;
        cout<<"Please select grades, use number 1 to 5: ";
        cin>>grade;
        /*if(grade<1 || grade>5){
            cout<<"You have entered an invalid grade!"<<endl;
        }

        else{
            cout<<"Enter number of questions you want to generate: ";
            cin>>question;
            while(question<1){
                cout<<endl;
                cout<<"You have entered an invalid number"<<endl;;
                cout<<"Enter number of questions you want to generate: ";
                cin>>question;
                }
            cout<<endl;
            questionGenerator(grade,question);
            cout<<endl;
            cout<<"Press n/N to Quit or Press any key and then Enter";
            cin>>choice;
            system("cls");
        }*/

        cout<<"Type N/n to Quit or Press Any Key and then Enter"<<endl;
        cout<<"Your choice? : ";
        cin>>choice;
        system("cls");
     }while(choice!='n' && choice!='N');

     return 0;
}

【问题讨论】:

  • 发布代码时,请将其设为 MCVE (Minimal, Complete, Verifiable Example)(或 MRE 或 SO 现在使用的任何名称;MCVE 已经使用了五年多,不需要更改)或 SSCCE( Short, Self-Contained, Correct Example)。除此之外,这意味着不包括 20 行注释掉的代码。如果代码相关,则不会出现在注释中;如果它不相关,它不应该在问题中。
  • Jonathan Leffler,如果我错了,请原谅我,实际上我是社区的新手,但我仍然不太了解发布规则和规定。就我的问题而言,我只是将相关代码放入 cmets 中,只是出于调试目的。
  • 请查看tourHow to Ask。您将学到:要对评论做出反应,您应该通过前缀@ 和名称来称呼评论者(您将在评论字段的左上角获得提案)。这将通知相应的评论者。 (否则,您的重新评论可能会被忽视。)
  • 感谢亲爱的@Scheff 提供宝贵的反馈意见,我一定会按照你的建议去做。

标签: c++


【解决方案1】:

你的等级变量是一个整数,所以它不能接受任何其他类型的变量。如果您要输入一个字符,那么为什么等级是一个整数,或者您要输入一个字符串?如果您需要这成为可能,那么可以尝试使用数组并开始将它们从数组转换为:整数浮动布尔字符串或字符。还要小心,因为 char 值可以分配给数字(字符代码)。

【讨论】:

  • 实际上,这是我的假设,任何人都可以输入整数以外的值,在这种情况下,我的程序应该足够高效,不会崩溃。因此,我尝试验证输入但徒劳无功。
  • 顺便说一句,我尝试了上一篇文章中的 cin.clear() 语句,它现在以某种方式解决了我的问题。感谢您的宝贵建议。
  • 好吧,如果您将等级变量更改为字符串,它可以包含用户可以输入的所有内容,如果只有数字,您可以检查并在必要时转换为整数、浮点数或双精度数
猜你喜欢
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2014-03-09
相关资源
最近更新 更多