无法退出do-while循环?

时间:2019-11-09 09:36:28

标签: c++

我不知道为什么在用户输入-1时do-while循环没有终止。只需忽略内部while循环之后的所有内容即可。我知道问题出在while循环中。我只是看不到。

int main()
{
    srand(time(0));
    int input;
    std::string pass, company, timeS;
    do
    {
        std::cout << "Enter password length: ";
        std::cin >> input;
        while(input < 8 || input > 16)
        {
            if(!std::cin)
            {
                std::cin.clear();
                std::cin.ignore(100, '\n');
            }

            std::cout << "Password length must be between 8 and 16.\nEnter password length: ";
            std::cin >> input;
        }

        std::cout << "Enter company name: ";
        std::getline(std::cin, company);

        pass = passGen(input);
        time_t now = time(0);
        auto time = *std::localtime(&now);
        std::stringstream ss;
        ss << std::put_time(&time, "%Y %b %d %H:%M:%S %a");
        timeS = ss.str();
        std::cout << "You passoword: " << pass << std::endl;
        writeFile(pass, company, timeS);

    }while(input != -1);

    return 0;
}

谢谢!

4 个答案:

答案 0 :(得分:0)

内部的while循环永远不会终止,因为条件对于.toggleClass('cards')始终为true。

 $('#btToggleDisplay').on('click', function () {
            $("#itineraryTable").toggleClass('cards')
            $("#itineraryTable thead").toggle()
        })

答案 1 :(得分:0)

在此循环中,您等待8到16之间的数字。

while(input < 8 || input > 16)
{
    if(!std::cin)
    {
        std::cin.clear();
        std::cin.ignore(100, '\n');
    }

    std::cout << "Password length must be between 8 and 16.\nEnter password length: ";
    std::cin >> input;
}

猜猜,那个循环永远不会出现什么?是的,-1! =)

答案 2 :(得分:0)

希望这会回答您的问题:

int main()
{
    srand(time(0));
    int input;
    std::string pass, company, timeS;
    // do
    // {
      while(true){
        std::cout << "Enter password length: ";
        std::cin >> input;
        if(input == -1){
          break;
        }
        while(input < 8 || input > 16)
        {
            if(!std::cin)
            {
                std::cin.clear();
                std::cin.ignore(100, '\n');
            }
            std::cout<< "=====>>>" << std::endl;

            std::cout << "Password length must be between 8 and 16.\nEnter password length: ";
            std::cin >> input;
        }
        std::cout << "Enter company name: ";
        std::getline(std::cin, company);

        pass = passGen(input);
        time_t now = time(0);
        auto time = *std::localtime(&now);
        std::stringstream ss;
        ss << std::put_time(&time, "%Y %b %d %H:%M:%S %a");
        timeS = ss.str();
        std::cout << "You passoword: " << pass << std::endl;
        writeFile(pass, company, timeS);
      }
    // }while(input != -1);

  return 0;
}

只需使用

while(true){
        //getting length of password  
        if(input == -1){
          break;
        }
        //rest of the logic
   }

答案 3 :(得分:0)

  

只需忽略内部while循环之后的所有内容。

好的。我们来做...

int main()
{
    int input;
    do
    {
        std::cout << "Enter password length: ";
        std::cin >> input;
        while(input < 8 || input > 16)
        {
            std::cin >> input;
        }
    }while(input != -1);

    return 0;
}
  

我知道问题出在while循环中。我只是看不到。

希望您现在能看到它。您的内心同时确保input永远不会-1

我认为您当前的问题是未构造代码的症状。因此,为了修复您的代码,我建议使用函数:

void do_something(int input);
bool read_and_validate(int& input) {
    input = 0;
    while(input < 8 || input > 16) {
        std::cin >> input;
        if (input == -1) return false;
    }
    return true;
}

int main() {
    int input;
    while( read_and_validate(input) ) {
        do_something(input);
    }    
}