关于#c语言#的问题:字符串二维数组

#include
int main()
{
    int t,n,i,a=0,b=0,j,p;
    char s[399][4];
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i1;i++)
        {
            for(j=0;j<4;j++)
            { scanf("%c",&s[i][j]);
            if(s[i][j]=='1')
                a++;
             else if(s[i][j]=='2')
                 b++;
             }
        }
        p=10+a-b;
        printf("%d\n",p);
        a=0;
        b=0;

    }
}

为啥运行的时候只能循环一次呀,第二次就无法输出结果

修改处见注释,供参考:

#include<stdio.h>
int main()
{
    int t,n,i,a=0,b=0,j,p;
    char s[399][4];
    scanf("%d",&t);
    while(t--)
    {
        printf("Input n:"); //修改
        scanf("%d",&n);
        for(i=0;i<n*n-1;i++)
        {
            for(j=0;j<4;j++)
            {
                scanf(" %c",&s[i][j]); //修改 scanf("%c",&s[i][j]);
                if(s[i][j]=='1')
                    a++;
                else if(s[i][j]=='2')
                    b++;
             }
        }
        p=10+a-b;
        printf("%d\n",p);
        a=0;
        b=0;
    }
    return 0;
}

这个代码只能循环一次是因为scanf在读入字符时会读入换行符,导致下一次读入时直接读入换行符而结束循环。解决办法是在读入字符之前调用getchar()读入换行符。

例如在scanf("%c",&s[i][j]);之前加上getchar();即可。