我正在为彩票游戏编写这个小程序。
所以我得到的代码输入了我的6位数和一个小函数来生成我的随机数,但是一旦我输入我的6个数字并在我的rand生成函数上运行测试我得到一个错误说“运行时检查失败#2:变量“数字”周围的堆栈已损坏“。
你们中的任何人都可以告诉我,我做错了什么吗?我绝对无能
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void Generate(int *a){
int i;
for(i=0; i<= 5;i++){
a[i] = (1 + (unsigned int)rand()%42);
}
}
main(){
int Numbers[5];
int Lotto[5];
int i,n;
for(i = 0; i<=5;i++){
printf("enter your %de number: ", i+1);
scanf("%d", &Numbers[i]);
}
srand(time(NULL));
for(n=0; n<6;n++){
Generate(&Lotto[n]);
if(n<1){
printf("%d",Lotto[n]);
}else{
printf("%5d",Lotto[n]);
}
}
}
答案 0 :(得分:1)
更改
int Numbers[5];
int Lotto[5];
for(n=0; n<6;n++){
Generate(&Lotto[n]);
到
int Numbers[6];
int Lotto[6];
Generate(&Lotto[0]);
for(n=0; n<6;n++){
答案 1 :(得分:0)
你的情况有误。
for(i = 0; i<=5;i++){
应该是
for(i = 0; i<5;i++){
因为数组Numbers
的内存仅为5个整数。带有lotto
数组的另一个循环和函数Generate()
中的指针访问a
的问题相同。它们都导致超出范围的访问错误,在C中为undefined。或者,如果要在其中包含6个整数,则相应地更改数组大小。请记住,对于大小为0
的数组,数组索引从n-1
开始,最高为n
。
答案 2 :(得分:0)
在C中,数组是从0
索引的。您声明了两个大小为5的数组。
更改
for(n=0; n<6;n++){...}
到
for(n=0; n<5;n++){...}
否则您的程序行为未定义