while循环在第二个用户输入C ++后停止工作

时间:2014-12-16 16:47:49

标签: c++ while-loop

我正在尝试在我的程序中实现一个功能,说明"你想退出吗?" 如果是,或者' 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;
            }
        }

4 个答案:

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

编辑2

我找到了解决问题的线程。测试,问题消失了。 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