本案例是在c++perimer plus书的214页一个案例,为了方便了解代码,本文将其逐句进行了详细的注解。
#include <iostream>
using namespace std; //添加工作空间,这样在cout打印的前面不用加std::
const int MAX = 5;//定义一个常量让他的值是5
int fill_array(double arr[], int limit);//声明一下定义的函数
void show_array(const double ar[],int n);
void revalue(double r,double ar[],int n);
int main() {
//首先创建一个数组名字,利用宏定义的方式,定义MAX,然后定义MAX=5;
double properties[MAX];//房地产的类型是浮点类型用double
//1:填充数组内容
//填充数组的内容,定义一个函数fill_array,填充填充数组名和成员和成员个数
//接下来定义函数;int fill_array(double ar[], int limit)
//定义完成函数之后发现函数需要一个返回值size
int size = fill_array(properties,MAX );
//2显示数组内容
//输入数组之后显示数组,需要显示数组名和有效输入个数size,然后定义函数
show_array(properties,size);
//3重新评估数组内容
//如果显示的有效个数size>0,可以评估
if(size >0)
{
//size大于0时,输入值
cout<<"提示输入比例系数factor:";
//比例系数设置一个因子factor,
double factor;//设置的比例因子
//cin>>factor;//利用cin进行捕获,捕获的数字放到factor
//如果输入错误不能进行捕获
while(!(cin>>factor))
{
cin.clear();
while(cin.get() != '\n')
continue;
cout<<"输入错误"<<endl;
}
//修改数组
revalue(factor,properties,size);
//显示修改factor后的函数
show_array(properties,size);
}
cout<<"done.\n";
cin.get();
cin.get();
return 0;
}
//这里用int,而不用void是因为返回值最多是5个,也可能只有3,4个,所以返回值设置为return i;超过最大返回值便不能用,存储个数与i有关
int fill_array(double ar[], int limit)//函数的指针和数组有大小limit
{
double temp;
int i;
//本文需要让用户输入信息,然后填充一下内容,所以用for循环
for(int i =0; i<MAX;i++)
{
cout<<"ENTER #"<<(i+1)<<endl;//因为i=0,用户没有第0组,只有从第一组开始,所以i+1
cin>>temp;//给出提示让用户输入信息,是浮点型double,在上面输入double temp;
//如果cin输入错误,就会取反
if (!cin)
{
cin.clear();//清楚错误标志位
//把所有cin所有错误标志位除去,包括的回车等等
//cin。get把缓冲区的字符读出来 whlie(cin.get())
//只要读出来的内容不是回车就一直读,!='\n';只要读到回车跳过这个循环
while(cin.get() != '\n')
continue;
cout<<"输入错误"<<endl;//读到回车,提示输入错误
break;//停止程序执行
}
//如果输入的值小于0,也是错误的
else if (temp<0)
break;
ar[i] = temp;//正常输出结果
}
return i;
}
//无返回值函数,现实的数组ar和大小n,这里面指向的对象不能修改,加const
void show_array(const double ar[],int n)
{
for(int i = 0; i<n;i++)
{
cout<<"property "<<(i+1)<<": $";
cout<<ar[i]<<endl;
}
}
void revalue(double r,double ar[],int n)
{
for (int i = 0; i < n;i++)//需要将数组的内容都进行修改,修改ar【】
{
ar[i] *= r;
}
}