查找数组中元素之间的匹配项? (C)

时间:2018-04-05 05:26:27

标签: c arrays

我正在尝试编写一个程序,该程序将接受输入并插入名为numbers的数组中。从那里使用嵌套的while循环扫描numbers中的重复项。 应将每个元素的匹配数量插入matches数组。

它适用于第一个元素,但是我得到其余元素的垃圾数据。

int main(void){
  int numbers[6]; //Array to hold input numbers
  int counter = 0;
  int size = 0;
  int matches[6];
  int counterOne = 0;
  int counterTwo = 0;

  while (counter<6) { //scan all numbers input from user
    scanf("%d", &numbers[counter]);
    size++;
    counter++;
  }

  while (counterOne < 6) {
    counterTwo = 0;
    while (counterTwo < 6) {
      if (numbers[counterOne] == numbers[counterTwo]) {
        matches[counterOne]++;
      }
      counterTwo++;
    }
    counterOne++;
  }

  for(int i = 0; i<size; i++)
  {
    printf("%d\n", matches[i] );
  }

  return 0;
}

2 个答案:

答案 0 :(得分:2)

您必须使用0初始化matches数组。读取未初始化的变量(读取和写入++)是未定义的行为。大多数情况下,在分配变量之前,只需获取内存中的内容,但标准不要求这样做。

要将此更改int matches[6];修正为int matches[6] = {0};

这会将数组中的所有条目设置为0.

但请注意,这并不意味着int matches[6] = {1};会将所有内容都设置为1。这是部分数组初始化。基本上,您只需将第一个值设置为括号中的值,其余值将填充0

int matches[6] = {1,2};{1,2,0,0,0,0}

相同

答案 1 :(得分:1)

matches数组未初始化,这就是增量时获取垃圾值的原因。使用int匹配[6] = {0};代替。