新手求教! acmer1004,求大神帮看看代码错哪了

新手求教!!! acmer1004,求大神帮看看代码哪里错了。
输入的第一行是一个正数N,表示后面有N行。每一行的第一个数是M,表示本行后面还有M个数。
样例输入
2
4 1 2 3 4
5 1 2 3 4 5
样例输出
10
15
我的代码:
#include <stdio.h>
int main()
{
    int n,m,k;
    int s1[50]={0};
    int c=0;
    scanf("%d\n",&n);
    while(scanf("%d\n",&m)&&n>0)
    {
        int s=0;
        if(m==0)
            break;
        else
         for(int i=0;i<m;i++)
         {
            scanf("%d",&k);
            s=s+k;
         }
        s1[c]=s;
        c++;
        n--;
    }
    for(int i=0;i<c;i++)
    {
        printf("%d\n",s1[i]);
    }
    return 0;
}

运行结果:
2
4 1 2 3 4 5
5 1 2 3 4 5 
6 1 2 3 4 5
10
15

不明白为什么我能多输入6开头那一行。弄了一个早上也没找出问题,求大神赐教啊!
C

------解决方案--------------------
step by step debug
------解决方案--------------------
while(scanf("%d\n",&m)&&n>0) //把n>0放在前面,代码如下行
while(n>0 && scanf("%d\n",&m)) //这样就可以了

------解决方案--------------------
#include <stdio.h>
int main()
{
    int n,m,k;