需要在C ++中添加循环以退出或重复

时间:2014-02-25 10:17:00

标签: c++

我想制作一个代码,要求用户输入要么退出或重复。我没有得到所需的输出。

int main()
{
    char yes,yn;
    do
    {
        cout << "Hello world!" << endl;
        while(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')
        {
            cout<<"enter (Y/N): ";
            cin>>yes;
            yn = yes;
        }
    }while(yn == 'y' || yn == 'Y');
}

程序要求用户输入,当我输入“Y,y,N或n”时,它应该退出循环,然后决定是退出还是重复。但它并没有摆脱循环,一次又一次地要求我输入。我没有得到停止循环的东西。

6 个答案:

答案 0 :(得分:2)

我没有测试,但你的问题似乎在这里:

while(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')

这种情况总是如此(但不应该)。它应该是:

while(yn != 'y' && yn != 'Y' && yn != 'n' && yn != 'N')

while(!(yn == 'y' || yn == 'Y' || yn == 'n' || yn == 'N'))

此外,yn未初始化,您可能想再次do { ... } while(...);

答案 1 :(得分:1)

while(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')

总是如此。它应该是

while(yn != 'y' && yn != 'Y' && yn != 'n' && yn != 'N')

答案 2 :(得分:1)

我认为while循环是你执行所需的全部......

    int main()
{
    char yes,yn;
    do
    {
        cout << "Hello world!" << endl;       
            cout<<"enter (Y/N): ";
            cin>>yes;
            yn = yes;
       if(yn=='N'||yn=='n')
       {
          break;  
       }

    }while(true);
}

你的循环不会退出,因为你的while循环总是正确的。

while(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')

现在我在循环中在if条件中添加了break语句并更改了do while条件 在这种情况下,它将在任何条件下运行循环,并且仅在用户输入n或N

时才退出循环

答案 3 :(得分:1)

首先,这个表达式:

(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')

始终为真,因为yn总是不等于其中一个。

(yn != 'y' && yn != 'Y' && yn != 'n' && yn != 'N')

可能就是你的意思。

其次,如果你这样做,你的生活会更容易

 yes = toupper (yes);

(即用大写字母表示),那么你只需要找一件事。

第三,最严重的是,您的内部while会在yes初始化之前检查do的值。使用while() {{1}}构造,或者在循环之前将值初始化为某些内容。

第四,目前还不清楚你在这里做什么。你真的需要两个循环吗?

答案 4 :(得分:0)

您没有初始化变量yn。所以这句话

while(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')

毫无意义,实际上没有必要。 请尝试以下代码

#include <iostream>

int main()
{
    char yes_no;

    do
    {
        std::cout << "\nHello world!" << std::endl;

        std::cout<< "Do you want to repeat? (enter Y/N): ";
        std::cin >> yes_no;
    } while ( yes_no == 'y' || yes_no == 'Y' );
}

答案 5 :(得分:0)

谢谢大家的帮助。我从你们所有人那里得到了我想要的东西。这是成功运行的最终代码。我根据你们所有人的意见改进了我的代码。

int main()
{
    char yes,yn;
    do
    {
        .......... (main content of program, do things here.)
         do
        {
            cout<<"Do again? (Y/N):";
            cin>>yes;
            yn = toupper(yes);
            if(yn!='N' && yn != 'Y')
            {
                cout<<"Invalid selection"<<endl;
            }
            if(yn=='N' || yn == 'Y')
            {
                break;
            }
        }
        while(true);
    }
    while(yn == 'Y');
}