我正在尝试编写一个程序,该程序将接受输入并插入名为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;
}
答案 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};代替。