在循环中,数组总是被清除

时间:2012-10-22 16:39:59

标签: c++ infinite-loop

每次我的程序循环时,存储在int array[]内的数据都被清除。

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

#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;
}

2 个答案:

答案 0 :(得分:4)

您在函数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()成为函数而不是构造函数。

答案 1 :(得分:3)

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