C++ 无法退出do while循环?

C++ 无法退出do while循环?,c++,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::ci

我不明白为什么用户在输入中输入-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;
}
intmain()
{
srand(时间(0));
int输入;
标准::字符串传递、公司、时间;
做
{
std::cout>输入;
while(输入<8 | |输入>16)
{
如果(!std::cin)
{
std::cin.clear();
标准::cin.ignore(100,“\n”);
}
std::cout>输入;
}

std::cout内部while循环永远不会终止,因为对于
-1
,条件始终为真

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>=0)|| 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;
        }

        if (input>0){
          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;
}
intmain()
{
srand(时间(0));
int输入;
标准::字符串传递、公司、时间;
做
{
std::cout>输入;
while((输入<8&&input>=0)| |输入>16)
{
如果(!std::cin)
{
std::cin.clear();
标准::cin.ignore(100,“\n”);
}
std::cout>输入;
}
如果(输入>0){

std::cout内部while循环永远不会终止,因为对于
-1
,条件始终为真

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>=0)|| 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;
        }

        if (input>0){
          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;
}
intmain()
{
srand(时间(0));
int输入;
标准::字符串传递、公司、时间;
做
{
std::cout>输入;
while((输入<8&&input>=0)| |输入>16)
{
if(!std::cin)
{
std::cin.clear();
标准::cin.ignore(100,“\n”);
}
std::cout>输入;
}
如果(输入>0){

std::cout在此循环中,您等待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;
}
while(输入<8 | |输入>16)
{
如果(!std::cin)
{
std::cin.clear();
标准::cin.ignore(100,“\n”);
}
std::cout>输入;
}

猜猜看,什么东西从循环中永远不会出来?对,
-1
!!=)

在这个循环中,您等待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;
}
while(输入<8 | |输入>16)
{
如果(!std::cin)
{
std::cin.clear();
标准::cin.ignore(100,“\n”);
}
std::cout>输入;
}

猜猜,什么东西从循环中永远不会出来?对,
-1
!!=)

希望这能回答你的问题:

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

希望这能回答你的问题:

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循环之后的所有内容

好的,让我们这样做吧

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循环之后的所有内容

好的,让我们这样做吧

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

您请求在范围
[8,16]
中输入。当它到达外部循环的末尾时,它将永远不会是
-1
。另一个问题是如果
std::cin.clear();
std::cin>>输入之后没有运行;
?什么是
std::getline(std::cin,company)
视为第一个字符?您要求输入范围
[8,16]
。当它到达外部循环的末尾时,它将永远不会是
-1
。另一个问题是如果
std::cin.clear();
std::cin>>输入之后不运行;
?什么是
std::getline(std::cin,company)
请参见第1个字符?请添加完整的示例以完成答案这是do-while实现。尽管这可以使用just-while循环和if条件轻松编写。请添加完整的示例以完成答案这是do-while实现。尽管这可以使用只需一段时间循环和if条件。