我正在尝试在我的程序中实现一个功能,说明"你想退出吗?" 如果是,或者' y'退出程序。 如果' N'或者' n'重新运行菜单,让用户做任何他们想做的事。
我面临的问题是我的菜单第一次运行,用户可以说是或否。 然后第二次他们可以说是或否。然而,第三次到达while循环时,它会无限输出菜单。
任何人都可以提出建议吗?
菜单的代码是
char exitInput = NULL;
char Y = 'Y', y = 'y', N = 'N', n = 'n';
while (exitInput != Y || exitInput != y || exitInput == N || exitInput == n)
{
cout << "*\t Please choose one of the following options. \t *" << endl;
cout << "1. \t" << "Transfer an amount \n"
<< "2. \t" << "List recent transactions \n"
<< "3. \t" << "Display account details and current balance \n"
<< "4. \t" << "Quit \n";
int menuSelection;
cout << "Enter your option here: ";
cin >> menuSelection;
switch (menuSelection)
{
case 1:
.......
case 2:
cout << "Do you want to exit the application? ";
cin >> exitInput;
}
}
答案 0 :(得分:1)
我不确定我是否理解你的问题,但如果是“当我说'是'时,菜单会再次出现”,这是正常的。 exitInput不能同时等于Y和y,因此while条件始终为true。
你应该尝试:
while ((exitInput != Y && exitInput != y) || exitInput == N || exitInput == n)
我可以在一个简单的win32应用程序中看到你的错误。我已经通过将menuselection
的类型从int
更改为char
来解决了这个问题,但我不知道为什么它有时会使用整数。这是我的测试程序:
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char exitInput = 'n';
char menuSelection;
while (exitInput !='Y' && exitInput !='y')
{
cout << "*\t Please choose one of the following options. \t *" << endl;
cout << "1. \t" << "Transfer an amount " << endl
<< "2. \t" << "List recent transactions " << endl
<< "3. \t" << "Display account details and current balance " << endl
<< "4. \t" << "Quit " << endl;
cout << "Enter your option here: ";
cin >> menuSelection;
switch (menuSelection)
{
case '2':
cout << "Do you want to exit the application? ";
cin >> exitInput;
break;
default:
cout << "Command is : " << menuSelection << endl;
cout << "Command not found !" << endl;
break;
}
}
return 0;
}
我找到了解决问题的线程。测试,问题消失了。 why-would-we-call-cin-clear-and-cin-ignore-after-reading-input
答案 1 :(得分:1)
这个条件
while (exitInput != Y || exitInput != y || exitInput == N || exitInput == n)
永远都是真的。您必须将其更改为:
while (exitInput != Y && exitInput != y)
此外,exitInput
的初始值没有多大意义,只需添加char exitInput = 'n'
答案 2 :(得分:0)
只需将while循环中的条件更改为:
while ((exitInput != Y) && (exitInput != y))
它会按预期工作。您的原始状态始终为真,无论 exitInput 具有什么值 - 这就是您编程失败的原因。请注意,无需检查 exitInput 是否 n / N 。 y / Y 表示退出,任何其他输入表示不退出,因此您必须只检查 y / Y 。
答案 3 :(得分:-1)
您在while()检查中的比较中有错误。尝试这样的事情:
while (exitInput != Y && exitInput != y )
{
cout << "*\t Please choose one of the following options. \t *" << endl;
...
还有其他我可以评论的内容,但它们并未解决您的问题。 HTH