我正在学习如何使用结构。 我努力让它发挥作用,实际上程序非常大,但特别是在这部分我需要你的帮助。 它不计算女性或男性的总数,它显示了奇怪的大数字或只有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;}
答案 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应为具有用户提供的类类型 默认构造函数。
这个不确定的值可能正如你所说,奇怪的大数字或只有零。