【发布时间】:2011-12-23 14:26:30
【问题描述】:
我正在通过教科书自学 C++,我有一个问题需要解决,概述如下。
我有以下类结构:
#include <iostream>
#include <cstdio>
#include <ctime>
using namespace std;
class classroom{
char name[25];
int student_id;
float grades[10];
float average;
int num_tests;
float letter_grade;
public:
void enter_name_id(void);
void enter_grade(void);
void average_grades(void);
void letter_grades(void);
void output_name_id_grade(void);
classroom();
};
我为上述类提供了以下构造函数:
classroom::classroom(){
int i;
srand((unsigned)time(0));
int random_integer=0;
random_integer = (rand()%5) + (rand()%5);
num_tests=0;
average=0.0;
for(i=0;i<10;i++){
grades[i]=0.0;
}
for(i=0;i<27;i++){
name[i]='-';
}
cout<<"\n*****************Finished*****************";
}
main 中声明了这个班级结构的 3 名学生:
int main()
{
classroom students[3];
//and so...
}
我需要为构造函数中的每个学生生成一个唯一的学生 ID,其值范围为 0 到 10。
我已将以下代码 sn-p 复制到构造函数中。它会在所需范围内为我生成随机数:
srand((unsigned)time(0));
int random_integer=0;
random_integer = (rand()%5) + (rand()%5);
问题是我需要删除生成的随机数范围内的任何重复项。
【问题讨论】:
-
更正:int random_integer=0;应该读为 int random_integer;
-
你为什么 1) 使用 2 个随机数的总和(这基本上 不 给你一个所需范围内的随机数) 2) 假设一个随机数可以服务作为标识符?
-
请注意,类名非常具有误导性——该对象似乎更接近
student而不是classroom。你应该考虑像描述它们一样命名你的类——在这种情况下,它们代表并包含关于学生的数据——所以它们应该被命名为Student。 -
re:correction -- 将其初始化为 0,然后将其设置为其他值,这很好,实际上是一种很好的编码习惯。
-
不确定代码是如何工作的,就像我说的那样,我只是复制了它。但它似乎符合我的要求(即生成 0 到 10 之间的数字)。我确实尝试过考虑主要问题的替代方案,但这是我能想到的第一个解决方案。
标签: c++ class random constructor