C语言怎么输入不定长度数组

我想输入未知长度的一组数字,传到数组里,遇到-1就停止,怎么定义数组并且保存数字?

遇到的问题是,在如下代码下运行,只能传入四个数字,再多就打印不出来了。哪里错了,要怎么写呢

#include<stdio.h>
int main()
{
    int n=1,max;int a[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);//2 -1//a[0]=2,n=2,i=1
        if(a[i]==-1)
        {
            n--;
            break;
        }
        n++;
    }
    for(int i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}

供参考:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int n = 0, x, i, *a = NULL;
    while (1) {
         scanf("%d", &x);
         if (x == -1) break;
         a = (int *)realloc(a,sizeof(int)*(n + 1));
         if (!a) return 1;
         a[n++] = x;
    }
    for (i = 0;i < n;i++)
        printf("%d ", a[i]);
    free(a);
    return 0;
}

#include <stdlib.h> 
#include <stdio.h>

int main() {
  int n = 0;
  int *a = malloc(sizeof(int) * 1);  
  int capacity = 1;

  while(1) {
    int x;
    scanf("%d", &x);
    if(x == -1) break;
    
    if(n == capacity) {
      capacity *= 2;
      a = realloc(a, capacity * sizeof(int));
    }
    a[n++] = x;
  }

  for(int i = 0; i < n; i++) {
    printf("%d ", a[i]);
  }
  
  free(a);
  return 0;
}