C++ 需要添加循环以退出或在C++;

C++ 需要添加循环以退出或在C++;,c++,C++,我想做一个代码,要求用户输入退出或重复。我没有得到期望的输出 int main() { char yes,yn; do { cout << "Hello world!" << endl; while(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N') { cout<<"enter (Y/N): ";

我想做一个代码,要求用户输入退出或重复。我没有得到期望的输出

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');
}
intmain()
{
是的,伊恩;
做
{
库特
这永远是真的,应该是

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

我认为执行时只需执行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);
}
现在,我在if条件的循环中添加了break语句,并更改了do while条件
在这种情况下,它将在任何条件下运行循环,并且仅当用户输入n或n时才会退出循环。我没有测试,但您的问题似乎在这里:

while(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')
此条件始终为真(但不应为真)。应为:

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


此外,
yn
未初始化,您可能希望在(…)时再次执行
do{…};

您没有初始化变量
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' );
}
#包括
int main()
{
char yes_no;
做
{

std::cout首先,这个表达式:

(yn != 'y' || yn != 'Y' || yn != 'n' || yn != 'N')
总是正确的,因为
yn
总是不等于这些事情之一

(yn != 'y' && yn != 'Y' && yn != 'n' && yn != 'N')
这可能就是你的意思

其次,如果你这样做了,你的生活会更轻松

 yes = toupper (yes);
(即,把它放在大写),那么你只需要寻找一件事

第三,也是最严重的一点,您的内部
while
在初始化之前检查
yes
的值。可以使用
do
while()
构造,也可以在循环之前初始化该值


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

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

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');
}
intmain()
{
是的,伊恩;
做
{
(节目的主要内容,在这里做事。)
做
{
库提斯;
yn=toupper(是);
如果(yn!='N'&&yn!='Y')
{

coutyn没有初始化,一个do…while可以在内部循环中更好地工作。而外部循环在这一点上似乎没有用。为什么是两个循环。我认为一个循环就可以满足您的需要…请重新考虑您的编码…内部循环不是必需的。这将检查“y和y”。如果我输入除“y,y,n或n”之外的任何内容它将退出循环。我特别希望只使用这四个字母来执行操作。@Krups如果用户输入的值与这四个字母不同,您希望执行什么操作?如果用户输入的字符与退出程序的字符不同,您希望执行什么操作。我不希望这样做。@Krups我已经对代码进行了一些更改,现在只有当用户输入N或nyes。问题就在那里。我已将| |替换为&。获得更多进展。一个循环是检查输入字符是否在这4个字符中(现在我添加了toupper。在这种情况下,介于2个字符之间)不允许使用其他字符。在y和n之间进行第二次循环检查。但欢迎使用更好的解决方案,只要它们满足这两个条件。
(yn != 'y' && yn != 'Y' && yn != 'n' && yn != 'N')
 yes = toupper (yes);
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');
}