簡體   English   中英

如何傳遞2D數組類型char(string)作為函數參數?

[英]how to pass 2D array type char (string) as function parameter?

我無法編譯程序。 我的函數參數有什么問題嗎? 是否由於我的數組聲明(char category [SIZE] [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 information\n\n";
        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.\tID\tName\t\t\tWeight(kg)\tHeight(m)\tBMI\tCategory\n";
    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 information\n\n";
        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.\tID\tName\t\t\tWeight(kg)\tHeight(m)\tBMI\tCategory\n";
    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 information\\n\\n"; 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.\\tID\\tName\\t\\t\\tWeight(kg)\\tHeight(m)\\tBMI\\t\\tCategory\\n"; for(int m=0;m<rowSize;m++) { cout<<m+1<<"\\t"<<id[m]<<"\\t"<<nama[m]<<"\\t\\t"<<berat[m]<<"\\t\\t"<<tinggi[m]<<"\\t\\t"<<bmi[m]<<"\\t\\t"<<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.\\tID\\tName\\t\\t\\tWeight(kg)\\tHeight(m)\\tBMI\\t\\tCategory\\n"; cout<<s+1<<"\\t"<<id[s]<<"\\t"<<nama[s]<<"\\t\\t"<<berat[s]<<"\\t\\t"<<tinggi[s]<<"\\t\\t"<<bmi[s]<<"\\t\\t"<<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.\\tID\\tName\\t\\t\\tWeight(kg)\\tHeight(m)\\tBMI\\t\\tCategory\\n"; cout<<s+1<<"\\t"<<id[s]<<"\\t"<<nama[s]<<"\\t\\t"<<berat[s]<<"\\t\\t"<<tinggi[s]<<"\\t\\t"<<bmi[s]<<"\\t\\t"<<category[s]<<endl; } } } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM