【发布时间】:2019-03-27 01:34:07
【问题描述】:
我想以最简单的方式生成 5 个不同的数字并将它们放入一个数组中。我的思维方式有问题,请您更正我的代码吗?
void lottery(int *array){
int i = 0;
while(i != 5){
bool good = true;
int number = rand()%90+1;
for(int j=0; j<5; j++){
if(array[j] == number)
good = false;
break;
}
if(good){
array[i] == number;
i = i+1;
}
}
}
int main(){
srand(time(0));
int numbers[5];
lottery(numbers);
for(int i =0; i<5; i++){
printf("%d, ",numbers[i]);
}
return 0;
}
【问题讨论】:
-
array[i] == number还要考虑你的数组没有初始化。 -
将
j < 5更改为j < i。你知道数组只包含i值。 -
以后,永远不要只给出“有问题”作为问题描述。显示错误的示例输出,或者准确地说出它有什么问题,或者显示正确的示例输出,或者两者兼而有之。通常,您还应该显示产生样本输出的样本输入。当涉及
srand时,您应该同时显示使用的种子(将其从time(0)更改为常数,并尝试不同的常数,直到找到产生要显示的样本的常数)并显示每个rand产生的值调用(因为不同的 C 实现有不同的rand实现)。 -
==不是赋值运算符。这不是你“思维方式”的问题,只是一个错字。 -
你是否意识到
if(array[j] == number) good = false; break;中的中断无条件地打破了for循环 - C 不是 Python,缩进对编译器没有任何意义,对阅读 C 的人来说意义重大。你需要大括号围绕作业和休息。