关于输入的几个问题【新手】

关于输入的几个小问题【新手求助】
1、如果我输入几个数字 中间用空格隔开 怎么用循环和scanf来输入呢?
比如:
当输入1 2 3 4时 分别给a[0],a[1],a[2],a[3]赋值
我的思路类似于
for(i=0;i<n;i++)
scanf("%d",&a[i]);
应该怎么写呢? 
2、接上面的问题,我要输入几个数字,用空格隔开,遇到回车停止,但之前不知道会输入多少个数,就要用动态数组,每输入一个数,数组a[]就能继续往后开空间,这个怎么才能做到呢

谢谢


------解决方案--------------------
1用你的代码,只能一个一个输入,每写一个回车一下
如果要一起输入,就需要确定输入的个数
scanf("%d %d %d %d", a,a+1,a+2,a+3);

2见1,在一行上输入的话无法动态
------解决方案--------------------
链表

探讨

引用:

1用你的代码,只能一个一个输入,每写一个回车一下
如果要一起输入,就需要确定输入的个数
scanf("%d %d %d %d", a,a+1,a+2,a+3);

2见1,在一行上输入的话无法动态


那我要不知道会输入多少个数 怎么才能实现输入呢

------解决方案--------------------
一次输入一个数据,用一个while循环
需要定义一个结束标志,即接收到这个值时输入结束

------解决方案--------------------
C/C++ code

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

#define INIT_SIZE 100 //初始容量
#define CREM_SIZE 20  //增加容量

typedef struct arrList{
    int *begin ;
    int *end ;
    int size ; //当前总容量
}List;

int main()
{

    List list ;
        list.begin = malloc(INIT_SIZE * sizeof(int));
    list.end = list.begin ;
    list.size = INIT_SIZE ;
    while(scanf("%d",list.end)){
        list.end ++ ;
        if(list.end >= (list.begin + list.size)){
            list.begin = realloc(list.begin , list.size + CREM_SIZE);
            list.end = list.begin + list.size ;
            list.size += CREM_SIZE ;
        }
    }

    return 0 ;
}