1.
int ch;
scanf("%lf%lf%lf%lf", ...);
while ((ch = getchar()) != '\n' && ch != EOF))
;
一般情况下不提倡getchar和scanf的混用,除非你完全弄清楚了stdio的缓存逻辑。或者可以这样:
fgets(buf, BUFSIZE, stdin);
sscanf("%lf%lf%lf%lf", ...);
2. 不一定,这种情况下,最好使用动态分配的数组,在长度超过的时候,以长度*2分配新的数组然后复制之,可以证明每个元素至多被均摊复制一次。