我想制作一个代码,要求用户输入要么退出或重复。我没有得到所需的输出。
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”时,它应该退出循环,然后决定是退出还是重复。但它并没有摆脱循环,一次又一次地要求我输入。我没有得到停止循环的东西。
答案 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');
}