首页 > 解决方案 > 如何正确使用标志控制循环,以便仅执行一次特定任务?

问题描述

我正在制作一个程序,要求用户输入两个有理数,根据用户选择加法还是减法,我的程序将执行任务,然后必须选择继续加法或减法或退出。

到目前为止,我已经完成了大部分编码,但是在编写标志控制循环时遇到了问题。对于我的程序,会出现一个显示菜单,询问用户是要减、加还是退出。

如果用户选择添加,屏幕将清空,顶部会出现一个标题,上面写着“有理数的添加”。这个标题应该只出现一次,之后我的程序会要求用户输入一个有理数。

由于程序应该添加两个有理数,在用户输入第一个有理数后,我的程序会要求用户输入另一个有理数。

所以总的来说,我的程序会问这个问题两次。

问题:我遇到的问题是,一旦出现“有理数加法”标题,并且我的程序第二次询问用户数字,标题就会再次出现。我尝试使用标志控制循环,但无论我尝试什么,它都会跳过标题或在每次提出问题时重复它。以下是我所指的代码:

void GetRational(char state, int& num, int& den)
{
    char c;
    bool once;
    once = true;

    while (once)
    {
        if (state == 'A' || state == 'a')
        {
            cout << "Addition of rational numbers" << endl;
            once = false;
        }
        else if (state == 'S' || state == 's')
        {
            cout << "Subtraction of rational numbers" << endl;
            once = true;
        }
        else break;
    }

    while (1)
    {
        cout << "\nPlease enter a fraction (n/d): ";
        cin >> num >> c >> den;
        if (den == 0)
            cout << "\nDenominator must not be 0";
        else break;
    }
}

标签: c++loopsbooleanflags

解决方案


GetRational记住once下次调用它的值,请将变量声明为

static bool once = true;

static变量只会被初始化一次,这将在第一次调用之前GetRational

然后,在你检查它之后,在你从返回之前GetRational,设置

once = false;

这将在调用之间持续存在GetRational


推荐阅读