功能未初始化

时间:2016-11-26 13:08:27

标签: c arrays function

如果数组中的某些数字相同,我在初始化函数以打印错误消息时遇到问题。

#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之外的所有数字。

2 个答案:

答案 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

仅打印不大于其索引的数字。同样,您的程序缺少一个变量来计算输入值的数量。