这是数组:
int deck [52] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11,
2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11,
2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11};
for(i = 0; i < 52; i++){
我用这个来交换同一个数组中的2个值:
randomNum1 = rand()%53;
randomNum2 = rand()%53;
temp = deck[randomNum1];
deck[randomNum1] = deck[randomNum2];
deck[randomNum2] = temp;
}
我输入了打印状态,看看我是否可以在数组中找到一个特定的数字:
for(i = 0; i < 52; i++){
randomNum1 = rand()%53;
randomNum2 = rand()%53;
printf("This is the random number 1: %d\n", randomNum1);
printf("This is the random number 2: %d\n", randomNum2);
temp = deck[randomNum1];
printf("This is the temp and deck[randomNum1] BEFORE: %d and %d\n", temp, deck[randomNum1]);
deck[randomNum1] = deck[randomNum2];
printf("deck[randomnum1]AFTER: %d\n", deck[randomNum1]);
printf("deck[randomNum2]BEFORE: %d\n", deck[randomNum2]);
deck[randomNum2] = temp;
printf("deck[randomNum2]AFTER: %d\n", deck[randomNum2]);
}
它进入的价值点总是随机的,它变成一个大数字。 从编译器打印出来:
- 这是随机数1:52
- 这是随机数2:1
- 这是临时和甲板[randomNum1] BEFORE:2271744和2271744
- deck [randumNum1] AFTER:3
- 甲板[randomNum2] BEFORE:3
- deck [randomNum2]后:2271744
醇>
另一个编译器运行:
- 这是随机数1:4
- 这是随机数2:16
- 这是临时和甲板[randomNum1] BEFORE:4和4
- deck [randumNum1]之后:2271744
- deck [randomNum2] BEFORE:2271744
- deck [randomNum2] AFTER:4
醇>
在此之前有几个if语句和一个while循环,但它们都没有触及此数组中的值。有什么建议吗?
答案 0 :(得分:1)
您将超出deck
数组的范围,因为它的有效索引从0开始并以51结束。您尝试访问索引52,这会导致未定义的行为。
要避免这种情况,请使用
randomNum1 = rand()%52;
randomNum2 = rand()%52;