本地没问题,提交全wa,且都提示我输出第一个元素为’-‘

P1957 口算练习题

catof221b @ 2023-02-05 08:40:37

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,a[100][3]={0},b[100][3],w[5]={0};
    char f,f2,f3;
    scanf("%d",&n);
    getchar();
    for(int i=0;i<n;i++)
    {
        if((f=getchar())>='a')
        {
            f2=f;
            scanf("%d%d",&a[i][0],&a[i][1]);
        }
        else
        {
            scanf("%d%d",&a[i][0],&a[i][1]);
            int temp=a[i][0];
            while(a[i][0]/10!=0)
            {
                w[1]=1;
                a[i][0]/=10;
                w[1]++;
            }
            a[i][0]=temp+pow(10,w[1])*(f-'2'+2);
        }
        getchar();
        switch(f2)
        {
            case 'a':{f3='+';a[i][2]=a[i][0]+a[i][1];}break;
            case 'b':{f3='-';a[i][2]=a[i][0]-a[i][1];}break;
            case 'c':{f3='*';a[i][2]=a[i][0]*a[i][1];}break;
        }
        b[i][0]=a[i][0];
        b[i][1]=a[i][1];
        b[i][2]=a[i][2];
        for(int j=0;j<3;j++)
        {
            w[0]=1;
            while(b[i][j]/10!=0)
            {
                b[i][j]/=10;
                w[0]++;
            }
            w[j+1]=w[0];
        }
        w[4]=w[1]+w[2]+w[3];
        if(a[i][2]<0)
        {
            w[4]++;
        }
        printf("%d%c%d=%d\n%d\n",a[i][0],f3,a[i][1],a[i][2],2+w[4]);
    }
    return 0;
}

by karanoli @ 2023-02-05 09:18:11

就是Linux机和win的换行符的区别,读取f用while就行了


by catof221b @ 2023-02-05 19:08:35

@karanoli 改成while还是一样的结果

while((f=getchar())>='a')
        {
            f2=f;
            scanf("%d%d",&a[i][0],&a[i][1]);
            break;
        }
        if(f<'a')
        {
            scanf("%d%d",&a[i][0],&a[i][1]);
            int temp=a[i][0];
            while(a[i][0]/10!=0)
            {
                w[1]=1;
                a[i][0]/=10;
                w[1]++;
            }
            a[i][0]=temp+pow(10,w[1])*(f-'2'+2);
     }

by AlexFad @ 2023-04-28 21:07:28

改成这样就行了

scanf("%*[\r\n]%[^\n]",s);

|