每次我的程序循环时,存储在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;
}
答案 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()
。