输出随机数组时出现 0

  • 本文关键字:随机 数组 输出 c
  • 更新时间 :
  • 英文 :


我做了一个洗牌类型的程序,它从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

您声明了int cases[22]但只在该数组中初始化了 21 个整数,因此,最后一个元素在未初始化时将为 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])数组的元素数。

这样,您可以向cases数组添加更多元素,而无需在程序的其他位置更改数组大小。

将数组声明为:

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

并采用漂亮的格式以避免此类错误。

数组

中的元素数量错误。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");

最新更新