2次元配列で文字列を出力したいのですが
printfで確かめてる最中、変な事が起きました

#include <stdio.h>
#include <string.h>
int main(void) {
int i;
char s1[999][999];
for( i = 0; i < 10;i++ ) {
scanf("%s\n",s1[i]);
printf("%s\n",s1[i]);
}
return(0);
}

これで実行してみると、最初に文字列を入力しても出力しないで、次の文字列を入力すると
一個前の文字列が出力されてしまいます。
scanfをgetsに変えたら順次出力されたのですが、これはなんででしょうか