-2

每次我的程序循环存储在 anint array[]中的数据都会被清除。

当用户选择第一个选项时,我每次都进行计数和计数检查,但它也被重置而不是增量。

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

class MissionPlan //start of MissionPlan class
{
    public:
    MissionPlan();

}; //end of MissionPlan class


MissionPlan::MissionPlan()
{
    int choice; // to capture what user inputs into menu
    int count=0; // to count how many times it save into array and use it later for looping
    int count2=0;//for adding x and y coordinates correctly into array
    int coor [100]; //storing x and y coordinates
    float index[100];//storing the civ index
    cout<<"Welcome to Mission Plan program!"<<endl<<endl<<"1)      Input statistical data"<<endl<<"2)      Compute civ.index value(for all records)"<<endl<<
    "3)      Print top 5 exploration destinations"<<endl<<"4)      Print total travel distance"<<endl<<endl<<"Please enter your choice: ";
    cin>>choice;
    for(;;)
    {
        if(choice == 1)
        {   
            cout<<count<<endl;
            cout<<count2<<endl; 
            int x,y; // for reading x and y coordinate
            cout<<"Please enter x-ordinate: "; //Display x-ordinate
            cin>>x;//reading input from user and put into x
            coor[count2] = x;//storing x coordinate into coor[] array
            cout<<"Please enter y-ordinate: ";//Display y-ordinate
            cin>>y;//reading input from user and put into x
            coor[1+count2] = y;//storing y coordinate into coor[] array
            cin.clear();//clearing cin
            cin.ignore(10000,'\n');//to ignore char to 10000 and a linefeed
            count++;
            count2 +=2;
            cout<<count<<endl;
            cout<<count2<<endl;
            return;         
        }
        else if(choice == 2)
        {       
            cout<<"choice 2 "<<endl;//to display
            return;
        }
        else if(choice==3)
        {

            cout<<"choice 3"<<endl;

            return;
        }

        else
            cout<<"Please enter number 1 to 4 only!"<<endl;
    }//end of while loop
}//end of MissionPlan()
int main()
{

    for(;;)
{
MissionPlan();
}
    return 0;
}
4

2 回答 2

4

您在 function 中声明了数组MissionPlan(),因此它们位于堆栈下。当函数返回(退出)时,不能保证数组会被保留,它们很可能会“重新初始化”,即归零。

如果需要保留数组的内容,有几种选择,一种是在全局范围内(即在所有函数之外)声明数组,另一种是static在数组变量中添加修饰符,使数组仅初始化一次,其内容将在整个程序中保留:

static int coor [100]; //storing x and y coordinates
static float index[100];//storing the civ index

另一种选择是在函数内部声明变量main()并通过函数参数传递它们。


我看到您class在代码中使用了它们,但似乎您没有正确使用它们:您只是一直在调用构造函数?(我很困惑它是否会起作用......)

我认为在您的情况下,您只需定义一个简单的函数。或者,如果您真的使用class,请在 中保留它的实例main(),将要重用的数组和其他变量放入 中class,然后创建MissionPlan()一个函数而不是构造函数。

于 2012-10-22T16:45:43.277 回答
3

在每次迭代结束时,您都会使return您无法运行功能。当您再次输入该函数时,所有局部变量都会重新初始化。将它们从函数体中取出。或者只是将外部无限循环main()放入MissionPlan().

于 2012-10-22T16:46:34.467 回答