一个scanf()用法的简单有关问题

一个scanf()用法的简单问题
本人想用scanf函数在一行上接收若干个整数类型,但是整数类型的个数不确定。
我用一个int a[1000]数组存储从控制台上接收的数据,即根据用户输入的n,来表示可以输入的行数。
C/C++ code

n = 2;
while(n--)
{
scanf("%d%d%d%d",&a[0],&a[1],&a[2],&a[3]);//只能接收4个数据
//do something()
}


例如:第一行是:12 343 456 342,一共4个数
但是我的第二行是:13 45 657 45 -234,一共五个数据,
那么如果用上边的scanf函数那么第5个数字就无法得到了
求各位大虾给出解决方法。
ps:转换为字符串这条路不行。

------解决方案--------------------
1、痛恨下****又404你懂的
2、楼主的问题是需要输入变长,一种方法是通过输入的数来控制后面的数的个数 例如 4 12 343 456 342
------解决方案--------------------
C/C++ code

    for(i=0;i<n;i++)
        scanf("%d",&a[i]);

------解决方案--------------------
可以的。getchar来做嘛。当你遇到空格的时候表示前面的是一个整数和后面的没有关系。遇到回车键就表示换行了
------解决方案--------------------
C/C++ code
#include <stdio.h>
char *p;
int i,v,n,k;
int a[1000];
char ln[80];
void main() {
    i=0;
    while (1) {
        fgets(ln,80,stdin);
        if (ln[0]=='\n') break;
        p=ln;
        while (1) {
            k=sscanf(p,"%d%n",&v,&n);
//          printf("k,v,n=%d,%d,%d\n",k,v,n);
            if (1==k) {
                p+=n;
                a[i]=v;
                i++;
                if (i>=1000) break;
            } else if (0==k) {
                p++;
            } else {//EOF==k
                break;
            }
        }
        if (i>=1000) break;
    }
    n=i;
    for (i=0;i<n;i++) printf("a[%d]=%d\n",i,a[i]);
}
//输入12 343 456 342回车
//输入13 45 657 45 -234回车
//输入回车
//输出
//a[0]=12
//a[1]=343
//a[2]=456
//a[3]=342
//a[4]=13
//a[5]=45
//a[6]=657
//a[7]=45
//a[8]=-234