我已经制作了一个从cases[];
获取的改组类型程序,并按随机顺序排列。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void deal(void);
int cases[22] = {1,2,3,4,5,6,8,10,15,20,25,35,50,65,85,100,105,135,165,200,250};
int main()
{
srand(time(NULL));
int a = 0;
deal();
for(a = 0 ; a < 22 ; a++)
printf("%d \n", cases[a]);
return 0;
}
void deal(void){
int loop;
int temp;
int x;
int y;
for(loop = 0; loop < 50; loop++){
x = rand() % 22;
y = rand() % 22;
temp = cases[x];
cases[x] = cases[y];
cases[y] = temp;
}
}
然而,当我运行代码时,它会随机放置0
。它来自哪里,为什么会出现?
示例输出:
6
15
0 //I don't want that
20
5
50
10
3
165
65
135
105
8
1
200
25
100
85
2
250
4
答案 0 :(得分:6)
您声明了int cases[22]
但是只将21个整数初始化为该数组,因此,未初始化时,最后一个元素将为0。尝试在数组的末尾添加另一个整数
答案 1 :(得分:4)
这是一个错误:Ferico Samuel的答案是正确的
这是一个补充:
而不是硬编码#include <iostream>
#include "ArrayClass.cpp"
using namespace std;
int main() {
ArrayClass<int> intArray(1);
intArray.addElement(5);
cout << intArray.accessElement(0);
cout << intArray.accessElement(1);
intArray.removeElement(0);
cout << intArray.accessElement(0);
return 0;
}
作为案例数量,你应该编写你的程序:
22
// no explicit declaration of the size here. The compiler automatically
// puts the correct size depending on the number of elements that follow.
int cases[] = {1,2,3,4,5,6,8,10,15,20,25,35,50,65,85,100,105,135,165,200,250};
...
for(a = 0 ; a < sizeof(cases) / sizeof(cases[0]); a++)
...
是sizeof(cases)
数组的大小(以字节为单位)
cases
是sizeof(cases[0])
数组的一个元素的大小
因此cases
是数组元素的数量。
这样,您可以向sizeof(cases) / sizeof(cases[0])
数组添加更多元素,而无需在程序的其他位置更改数组大小。
答案 2 :(得分:3)
您将数组声明为:
int cases[22] = {1,2,3,4,5,6,8,10,15,20,25,35,50,65,85,100,105,135,165,200,250};
如果你不知道,那个数组中实际上只有21个元素。因此,在C标准编译器中,非初始化值将被设置为零。要更正它,请向该数组添加一个元素。
int cases[22] = {1,2,3,4,5,6,8,10,15,20,25,35,50,65,85,100,105,135,165,200,250, 500}; // add 500
事情会好起来的。
无论如何,对于这种初始化,我建议你把元素放在多行(比方说,每10个元素):
int cases[22] = {1, 2, 3, 4, 5, 6, 8, 10, 15, 20,
25, 35, 50, 65, 85, 100,105,135,165,200,
250, 500}; // add 500
并设置好格式以避免此类错误。
答案 3 :(得分:3)
数组中的元素数量错误。 C有点愚蠢,因为它的设计使得编译器只能检测数组中是否有太多元素,但是如果元素太少则永远不会。
为确保元素的确切数量,您可以声明如下数组:
#define ARRAY_ITEMS(arr) (sizeof(arr) / sizeof(*arr))
#define CASES_ITEMS 22
int cases[] = {1,2,3,4,5,6,8,10,15,20,25,35,50,65,85,100,105,135,165,200,250};
_Static_assert(ARRAY_ITEMS(cases) == CASES_ITEMS, "Wrong array size: cases");