如果数组中的某些数字相同,我在初始化函数以打印错误消息时遇到问题。
#include<stdio.h>
#include<stdlib.h>
void printRepeating(int arr[], int size)
{
int i, j;
for(i = 0; i < size; i++)
for(j = i+1; j < size; j++)
if(arr[i] == arr[j])
printf("Wrong input. Same numbers in array!\n");
}
int main()
{
int arr[200],i;
int res, num;
while((res = scanf("%d", &num)) == 1)
{
arr[i++] = num;
if(num == 0){
break;
}
}
for(i = 0; i < arr[i]; i++)
printf("%d ", arr[i]);
printf("\n");
int arr_size = sizeof(arr[i])/sizeof(arr[0]);
printRepeating(arr, arr_size);
return 0;
}
如果我扫描1 2 3 1 4 5 0
,我的函数printRepeating
将无法启动,但数组1 1
在数组中是相同的,为什么?另一个问题是,当我键入1 2 3 1 5 0
时,它只会打印1 2 3
,例如,当我扫描1 2 3 4 5 6 7 8 9 0
时,它会打印除0之外的所有数字。
答案 0 :(得分:0)
您的代码中存在多个问题。首先,将i
初始化为0
,并在j
旁边声明一个新变量i
,
int arr[200], i = 0, j;
数组的大小只是i
,每次在数组中插入元素时都会增加,并更改它,
for(i = 0; i < arr[i]; i++)
printf("%d ", arr[i]);
到这个
for(j = 0; j < i; j++)
printf("%d ", arr[j]);
因为数组的大小存储在变量i
中。此外,计算数组大小的方式是错误的,每次返回1
,因为分子和分母是相同的。通常,它是sizeof(array)/sizeof(array[0])
,在这种情况下,它也会返回200
,因为声明的数组的大小是200
,但是因为你增加了i
每次插入时,只需将arr_size
设置为i
。
int arr_size = i;
答案 1 :(得分:0)
这一行
<div>
<h1 id="temperature" class="text-center inline">temperature</h1>
<div class="btn-group inline" data-toggle="buttons-checkbox">
<div class="btn btn-primary unitButton">C</div>
<div class="btn btn-primary unitButton">F</div>
</div>
</div>
不符合您的期望。您只是将数组的两个元素的大小分开,这些元素的大小始终相同,因此总是给出int arr_size = sizeof(arr[i])/sizeof(arr[0]);
作为结果。如果要为函数提供元素数量,请为其提供一个变量,用于在读取每个数字时对其进行计数。
还有:
1
仅打印不大于其索引的数字。同样,您的程序缺少一个变量来计算输入值的数量。