c ++ - 如何使用结构来计算引入的男性和女性总数?

时间:2014-08-22 00:39:52

标签: c++ arrays structure

我正在学习如何使用结构。 我努力让它发挥作用,实际上程序非常大,但特别是在这部分我需要你的帮助。 它不计算女性或男性的总数,它显示了奇怪的大数字或只有0"。 所以,如果你能告诉我自己做错了什么,我真的很感激。

感谢。

    #include <iostream>

using namespace std;

struct person
{

   int sex;
   int males; 
   int females;   
};

typedef struct person P;

int main()
{

int size=0;
cout<<"How many employees do you want to insert? "<<endl;
cin>>size;
P employee[size];
for(int i=0;i<size;i++)
{


    cout<<"\t1.Male\t2.Female"<<endl;
    cin>>employee[i].sex;
    if (employee[i].sex==1)
{
    employee[i].males++;
}
else
{
    employee[i].females++;
}
cout<<"\n\n* * * * * *\n\n";
}



for(int i=0;i<size;i++)
{

cout<<"Male employees: = "<<employee[i].males<<endl;
cout<<"Female employees: "<<employee[i].females<<endl;
}


system ("pause");
return 0;}

2 个答案:

答案 0 :(得分:1)

您遇到的问题是因为您没有为employee []数组启动值为0。当您声明数组employee []时,您的操作系统会自动为.sex,.male,.female中的每一个提供计算机内部的内存位置,该位置之前已填充其他随机整数。每当你声明一个像你所做的那样的数组时,你应该创建一个循环,将所有变量初始化为零,例如:

for (int i = 0; i<size; i++)
{
  employee[i].sex = 0;
  employee[i].male = 0;
  employee[i].female = 0;
}

您应该在声明员工阵列后立即执行此操作。这应该可以解决你的问题。

编辑:您遇到的另一个问题是您没有输出正确的信息。你的最终代码只为'i'的每个案例输出employee [i] .male和female,所以获得的值总是1和0.如果你想看看有多少是女性或男性,你应该声明一个单独的整数值,将其启动为零,并创建一个if条件,每次员工分别为男性或女性时,将男性或女性整数值增加1

答案 1 :(得分:1)

  

显示“奇怪的大数字或只有0”。

以下是关于未初始化值的标准。

  

§8.5/ 11

     

如果没有为对象指定初始化程序,则该对象为   默认初始化;如果没有执行初始化,则使用一个对象   自动或动态存储持续时间不确定值。

...

  

§8.5/ 6

     

默认初始化T类型的对象意味着:

     

- 如果T是a   (可能是cv-qualified)类类型(第9节),默认构造函数   调用T(如果T没有,则初始化是错误的   access default constructor);

     

- 如果T是数组类型,则每个元素都是默认初始化的;

     

- 否则,不执行初始化。

     

如果程序要求默认初始化a的对象   const限定类型T,T应为具有用户提供的类类型   默认构造函数。

这个不确定的值可能正如你所说,奇怪的大数字或只有零。