将变量从循环传递到主函数

时间:2017-11-26 00:57:47

标签: c++

我参加了一个介绍c ++课程,我有一个由家庭作业分配的问题。赋值要求使用函数验证两个变量(整数)。赋值是拒绝一个无效的变量,这将结束程序。我正在尝试设置一个循环,如果第一个输入无效,它将要求并验证来自用户的新输入。我觉得这样更有意义,因为用户不必再次关闭和打开程序。

这是我遇到障碍的地方:我使用循环获取并验证变量,因此如果第一个变量无效,我可以提示并验证新输入,但它们将是循环的本地。如何将循环中的验证输入传递回主函数?我的变量(" yr1"和" yr2"是全局定义的,我认为这可以解决我的问题)。我认为答案将是一个回复声明,但我也无法做到这一点。 最后,因为我是新手,所以我希望我的代码不是很好。如果您对如何使我的代码更具可读性有任何建议,我很乐意倾听。谢谢你的时间。

以下是代码:

    void getDate ()
    {
        // Get the starting year
        cout << "Please enter the starting year" << endl;
        cin >> yr1;
        rangeCheck (yr1);


        // Get the ending year
        cout << "Please enter the ending year" << endl;
        cin >> yr2;
        rangeCheck (yr2);

        if (yr1 > yr2)
            {
                cout << yr1 << "-" << yr2 << " Invalid range error. Please try again." << endl;
                getDate();
            }

        else if (yr1 == yr2)
            {
                cout << yr1 << "-" << yr2 << " These years match. Please try again." << endl;
                getDate();
            }
    }

P.S。 rangeCheck()是一个验证变量验证的函数。确保数字在1900到2099之间,即yr2> yr1,他们不一样。该程序的其余部分运行闰年计算,以确定在输入范围内有多少闰年下降。

对不起帖子的长度。

编辑:这是主要的

    #include <iostream>
    using namespace std;
    //Function declarations
    void rangeCheck ();
    void getDate();
    void leapCalc(int);

    //Variable declarations
    int yr1;
    int yr2;
    int years = 0;
    int leap;
    //int leap; //<< " " << leap

    //Main
    int main()
    {
        cout << "Please enter any two (2) years between 1900" << endl;
        cout << "and 2099 and this program will determine" << endl;
        cout << "how many leap years fall between them." << endl;
        cout << endl;

        getDate();

        for (int leap = yr1 ; leap < yr2; )
            {
            leapCalc(leap);
            leap++;
            }

        cout << yr1 << " " << yr2 << " " << years << endl;

        return 0;
    }

这是rangeCheck功能

    void rangeCheck (int day)
    {
        for ( ;day ;)
        {

            if (day < 1900 || day >2099)
            {
                cout << day << " is an invalid entry. Please try again." << endl;
                getDate();
            }

            else
            {
                return;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

好的,我认为你的循环不在函数之内? 我进一步假设rangeCheck设置了一个全局,如isValid

因此,如果您的第一个数字无效,那么全局将为false,但是第二个数字有效,那么将isValid设置为true,因此即使输入无效,也不会注意到。如果rangeCheck有效或无效,您应该def opponent_fun(board): random.seed() opponent = random.randint(0, 8) if board[opponent] != 'o' and board[opponent] != 'x': board[opponent] = 'o' return board else: return opponent_fun(board) 返回true或false。

您还需要getDate返回一个布尔值,以便您知道各个响应是否有效。