如何将二维数组类型字符(字符串)作为函数参数传递?
how to pass 2D array type char (string) as function parameter?
我无法编译程序。 我的函数参数有什么问题吗? 是因为我的数组声明(字符类别[大小][15](吗?我已将其设为 2D 数组,因为列部分包含字母表的大小。你们能指出我的代码有什么问题以及如何将数组作为函数参数传递吗?对不起,我对这个话题是全新的。
#include<iostream>
#include<string.h>
using namespace std;
const int COLSIZE=3;
const int NAMESIZE=30;
void inputPersonalData(int, long[],int,char[],float[],float[]);
void calcBMI(int,float[],float[],float[]);
void bmiCategory(int,float[],char[]);
void displayPersonalData(int,long[],char[],float[],float[],float[],char[]);
void inputCal(int,char[],long[],float[][COLSIZE],char[]);
int main()
{
int SIZE;
long ID[SIZE];
char name[NAMESIZE];
float weight[SIZE];
float height[SIZE];
float BMI[SIZE];
char category[SIZE][15];
char meal[COLSIZE][10];
float calIntake[SIZE][COLSIZE];
cout<<"Enter the number of models: ";
cin>>SIZE;
inputPersonalData(SIZE,ID,NAMESIZE,name,weight,height);
calcBMI(SIZE,weight,height,BMI);
bmiCategory(SIZE,BMI,category);
displayPersonalData(SIZE,ID,name,weight,height,BMI,category);
strcpy(meal[0],"BREAKFAST");
strcpy(meal[1],"LUNCH");
strcpy(meal[2],"DINNER");
inputCal(SIZE,name,ID,calIntake,meal);
return 0;
}
void inputPersonalData(int rowSize, long id[],int nameSize, char nama[],float berat[],float tinggi[])
{
for(int i=0;i<rowSize;i++)
{
cout<<"nModel "<<i+1<<"'s informationnn";
cout<<"ID: ";
cin>>id[i];
cout<<"Name: ";
cin>>ws;
cin.getline(nama,nameSize);
cout<<"Weight in kg: ";
cin>>berat[i];
cout<<"Height in m: ";
cin>>tinggi[i];
cout<<endl<<"***************************************"<<endl;
}
}
void calcBMI(int rowSize,float berat[],float tinggi[],float bmi[])
{
for(int j=0;j<rowSize;j++)
{
bmi[j]=(berat[j]/tinggi[j])/tinggi[j];
}
}
void bmiCategory(int rowSize,float bmi[],char category[])
{
for(int k=0;k<rowSize;k++)
{
if(bmi[k]>25)
strcpy(category[k],"OVERWEIGHT");
else if(bmi[k]>18)
strcpy(category[k],"NORMAL");
else
strcpy(category[k],"UNDERWEIGHT");
}
}
void inputCal(int rowSize,char nama[],long id[],float calorie[][COLSIZE],char mealName[])
{
for(int row=0;row<rowSize;row++)
{
cout<<"Model "<<row+1<<" ("<<nama[row]<<", ID: )"<<id[row]<<" DAILY CALORIE INTAKE:n";
for(int col=0;col<COLSIZE;col++)
{
cout<<"Calorie intake for "<<mealName[col]<<": ";
calorie[row][col];
}
}
}
void displayPersonalData(int rowSize,long id[],char nama[],float berat[],float tinggi[],float bmi[],char category[])
{
cout<<"No.tIDtNametttWeight(kg)tHeight(m)tBMItCategoryn";
for(int m=0;m<rowSize;m++)
{
cout<<m+1<<"t"<<id[m]<<"t"<<nama[m]<<"t"<<berat[m]<<"t"<<tinggi[m]<<"t"<<bmi[m]<<"t"<<category[m]<<endl;
}
}
您没有以正确的方式将 2D 数组传递给函数。有关更多详细信息,请阅读本主题。顺便说一下,这是经过一些修改的代码:
#include<iostream>
#include<string.h>
using namespace std;
const int COLSIZE=3;
const int NAMESIZE=30;
void inputPersonalData(int, long[],int,char[],float[],float[]);
void calcBMI(int,float[],float[],float[]);
void bmiCategory(int,float[],char[][15]);
void displayPersonalData(int,long[],char[],float[],float[],float[],char[][15]);
void inputCal(int,char[],long[],float[][COLSIZE],char[][10]);
int main()
{
int SIZE;
long ID[SIZE];
char name[NAMESIZE];
float weight[SIZE];
float height[SIZE];
float BMI[SIZE];
char category[SIZE][15];
char meal[COLSIZE][10];
float calIntake[SIZE][COLSIZE];
cout<<"Enter the number of models: ";
cin>>SIZE;
inputPersonalData(SIZE,ID,NAMESIZE,name,weight,height);
calcBMI(SIZE,weight,height,BMI);
bmiCategory(SIZE,BMI,category);
displayPersonalData(SIZE,ID,name,weight,height,BMI,category);
strcpy(meal[0],"BREAKFAST");
strcpy(meal[1],"LUNCH");
strcpy(meal[2],"DINNER");
inputCal(SIZE,name,ID,calIntake,meal);
return 0;
}
void inputPersonalData(int rowSize, long id[],int nameSize, char nama[],float berat[],float tinggi[])
{
for(int i=0;i<rowSize;i++)
{
cout<<"nModel "<<i+1<<"'s informationnn";
cout<<"ID: ";
cin>>id[i];
cout<<"Name: ";
cin>>ws;
cin.getline(nama,nameSize);
cout<<"Weight in kg: ";
cin>>berat[i];
cout<<"Height in m: ";
cin>>tinggi[i];
cout<<endl<<"***************************************"<<endl;
}
}
void calcBMI(int rowSize,float berat[],float tinggi[],float bmi[])
{
for(int j=0;j<rowSize;j++)
{
bmi[j]=(berat[j]/tinggi[j])/tinggi[j];
}
}
void bmiCategory(int rowSize,float bmi[],char category[][15])
{
for(int k=0;k<rowSize;k++)
{
if(bmi[k]>25)
strcpy(category[k],"OVERWEIGHT");
else if(bmi[k]>18)
strcpy(category[k],"NORMAL");
else
strcpy(category[k],"UNDERWEIGHT");
}
}
void inputCal(int rowSize,char nama[],long id[],float calorie[][COLSIZE],char mealName[][10])
{
for(int row=0;row<rowSize;row++)
{
cout<<"Model "<<row+1<<" ("<<nama[row]<<", ID: )"<<id[row]<<" DAILY CALORIE INTAKE:n";
for(int col=0;col<COLSIZE;col++)
{
cout<<"Calorie intake for "<<mealName[col]<<": ";
calorie[row][col];
}
}
}
void displayPersonalData(int rowSize,long id[],char nama[],float berat[],float tinggi[],float bmi[],char category[][15])
{
cout<<"No.tIDtNametttWeight(kg)tHeight(m)tBMItCategoryn";
for(int m=0;m<rowSize;m++)
{
cout<<m+1<<"t"<<id[m]<<"t"<<nama[m]<<"t"<<berat[m]<<"t"<<tinggi[m]<<"t"<<bmi[m]<<"t"<<category[m]<<endl;
}
}
固定
#include<iostream>
#include<string.h>
#include<iomanip>
using namespace std;
const int COLSIZE=3;
const int SIZE=15;
const int NAMESIZE=30;
void inputPersonalData(int, long[],char[][NAMESIZE],float[],float[]);
void calcBMI(int,float[],float[],float[]);
void bmiCategory(int,float[],char[][15]);
void displayPersonalData(int,long[],char[][NAMESIZE],float[],float[],float[],char[][15]);
void inputCal(int,char[][NAMESIZE],long[],float[][COLSIZE],char[][10]);
void totalCal(int,float[][COLSIZE],float[]);
void idealCal(int rowSize,float bmi[],float idealCal[]);
void condition(int,float [],float [],long [],char[][NAMESIZE]);
void searchId(int,long[],char[][NAMESIZE],float[],float[],float[],char[][15]);
int main()
{
int numdata;
long ID[SIZE];
char name[SIZE][NAMESIZE];
float weight[SIZE];
float height[SIZE];
float BMI[SIZE];
char category[SIZE][15];
char meal[COLSIZE][10];
float calIntake[SIZE][COLSIZE];
float totalCalIntake[SIZE];
float idealCalIntake[SIZE];
cout<<"Enter the number of models: ";
cin>>numdata; //assume user input lower than size
inputPersonalData(numdata,ID,name,weight,height);
calcBMI(numdata,weight,height,BMI);
bmiCategory(numdata,BMI,category);
displayPersonalData(numdata,ID,name,weight,height,BMI,category);
strcpy(meal[0],"BREAKFAST");
strcpy(meal[1],"LUNCH");
strcpy(meal[2],"DINNER");
cout<<"nDAILY CALORIE INTAKE for:n";
inputCal(numdata,name,ID,calIntake,meal);
totalCal(numdata,calIntake,totalCalIntake);
idealCal(numdata,BMI,idealCalIntake);
condition(numdata,totalCalIntake,idealCalIntake,ID,name);
searchId(numdata,ID,name,weight,height,BMI,category);
return 0;
}
void inputPersonalData(int rowSize, long id[], char nama[][NAMESIZE],float berat[],float tinggi[])
{
for(int i=0;i<rowSize;i++)
{
cout<<"nModel "<<i+1<<"'s informationnn";
cout<<"ID: ";
cin>>id[i];
cout<<"Name: ";
cin>>ws;
cin.getline(nama[i],NAMESIZE);
cout<<"Weight in kg: ";
cin>>berat[i];
cout<<"Height in m: ";
cin>>tinggi[i];
cout<<endl<<"***************************************"<<endl;
}
}
void calcBMI(int rowSize,float berat[],float tinggi[],float bmi[])
{
for(int j=0;j<rowSize;j++)
{
bmi[j]=(berat[j]/tinggi[j])/tinggi[j];
}
}
void bmiCategory(int rowSize,float bmi[],char category[][15])
{
for(int k=0;k<rowSize;k++)
{
if(bmi[k]>25.0)
strcpy(category[k],"OVERWEIGHT");
else if(bmi[k]>18.0)
strcpy(category[k],"NORMAL");
else
strcpy(category[k],"UNDERWEIGHT");
}
}
void displayPersonalData(int rowSize,long id[],char nama[][NAMESIZE],float berat[],float tinggi[],float bmi[],char category[][15])
{
cout<<"n****************************************************************************************************************n";
cout<<"No.tIDtNametttWeight(kg)tHeight(m)tBMIttCategoryn";
for(int m=0;m<rowSize;m++)
{
cout<<m+1<<"t"<<id[m]<<"t"<<nama[m]<<"tt"<<berat[m]<<"tt"<<tinggi[m]<<"tt"<<bmi[m]<<"tt"<<category[m]<<endl;
}
}
void inputCal(int rowSize,char nama[][NAMESIZE],long id[],float calorie[][COLSIZE],char mealName[][10])
{
for(int row=0;row<rowSize;row++)
{
cout<<"nModel "<<row+1<<" ("<<nama[row]<<", ID: "<<id[row]<<") n";
for(int col=0;col<COLSIZE;col++)
{
cout<<"Calorie intake for "<<mealName[col]<<": ";
cin>>calorie[row][col];
}
}
}
void totalCal(int rowSize,float calorie[][COLSIZE],float totalCalorie[])
{
for(int p=0;p<rowSize;p++)
{
totalCalorie[p]=0;
for(int q=0;q<COLSIZE;q++)
{
totalCalorie[p]=totalCalorie[p]+calorie[p][q];
}
}
}
void idealCal(int rowSize,float bmi[],float idealCal[])
{
for(int n=0;n<rowSize;n++)
{
if(bmi[n]>25.0)
{
idealCal[n]=1500;
}
else if(bmi[n]>18.0)
{
idealCal[n]=2000;
}
else
{
idealCal[n]=2500;
}
}
}
void condition(int rowSize,float totalCalorie[],float idealCal[],long id[],char nama[][NAMESIZE])
{
float minuteXercise[rowSize];
for(int r=0;r<rowSize;r++)
{
if(totalCalorie[r]>idealCal[r])
{
minuteXercise[r]=(totalCalorie[r]-idealCal[r])/15.95;
cout<<fixed<<setprecision(2);
cout<<"nModel "<<r+1<<" Id: "<<id[r]<<" ("<<nama[r]<<") need to excercise for "<<minuteXercise[r]<<" minutes to burn excess calorie.n";
}
else if(totalCalorie[r]<idealCal[r])
{
cout<<"nModel "<<r+1<<" Id: "<<id[r]<<" ("<<nama[r]<<") need to add "<<idealCal[r]-totalCalorie[r]<<" more calories to gain more weight.n";
}
else
{
cout<<"nModel "<<r+1<<" Id: "<<id[r]<<" ("<<nama[r]<<")'s calorie intake are perfect.n";
}
}
}
void searchId(int rowSize,long id[],char nama[][NAMESIZE],float berat[],float tinggi[],float bmi[],char category[][15])
{
long searchModel;
bool foundId=false;
cout<<"nEnter ID to be search: ";
cin>>searchModel;
for(int s=0;s<rowSize;s++)
{
if(searchModel==id[s])
{
foundId=true;
cout<<"n****************************************************************************************************************n";
cout<<"No.tIDtNametttWeight(kg)tHeight(m)tBMIttCategoryn";
cout<<s+1<<"t"<<id[s]<<"t"<<nama[s]<<"tt"<<berat[s]<<"tt"<<tinggi[s]<<"tt"<<bmi[s]<<"tt"<<category[s]<<endl;
}
}
while(!foundId)
{
cout<<"nThe ID is not in our system!n";
cout<<"Enter ID to be search: ";
cin>>searchModel;
for(int s=0;s<rowSize;s++)
{
if(searchModel==id[s])
{
foundId=true;
cout<<"n****************************************************************************************************************n";
cout<<"No.tIDtNametttWeight(kg)tHeight(m)tBMIttCategoryn";
cout<<s+1<<"t"<<id[s]<<"t"<<nama[s]<<"tt"<<berat[s]<<"tt"<<tinggi[s]<<"tt"<<bmi[s]<<"tt"<<category[s]<<endl;
}
}
}
}
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称