自测和答案一模一样,但就是爆0 求助大佬! 代码可读性很强

P1957 口算练习题

ASaltyFish @ 2020-11-30 17:51:18

#include<bits/stdc++.h>
using namespace std;
int len(int x)//判断位数 
{
    int len=0;
    if(x<0) 
    {
        x*=-1;
        len++;
    }
    while(x>0)
    {
        x/=10;
        len++;
    }
    return len;
}
int main()
{
    int n;
    scanf("%d",&n);
    getchar();//读取第一个回车 
    char r;//r用来存放运算符 
    for(int p=1;p<=n;p++)
    {
        char s[20];//s用来存放整行输入 
        char x[10],y[10];//x,y用来存放两个数字 
        memset(y,0,sizeof(y));//清空x y数组 
        memset(x,0,sizeof(x));
        gets(s);
        if(s[0]<='z'&&s[0]>='a')//判断第一个字符是不是字母 
        {
            //如果是,则开始存放两个数字 
            r=s[0];
            int k=0;
            int i=1;
            for(i=2;i<strlen(s);i++)//存放第一个数字 
            {
                if(s[i]!=' ')//遇到空格就停止读入 
                x[k++]=s[i];
                else break;
            }
            for(i=i+1,k=0;i<strlen(s);i++)//存放第二个数字 
            y[k++]=s[i];
        }
        else//如果第一位不是字母,说明运算符为上一行的运算符,直接开始存数字 
        {
            int k=0;
            int i=0;
            for(i=0;i<strlen(s);i++)//与上同理 
            {
                if(s[i]!=' ')
                x[k++]=s[i];
                else break;
            }
            for(i=i+1,k=0;i<strlen(s);i++)
            y[k++]=s[i];
        }

        int x1=atoi(x),y1=atoi(y);//用x1,y1来存两个数的整型形式 
        //atoi用来转字符型为整型 
        if(r=='a') 
            printf("%d+%d=%d\n%d",x1,y1,x1+y1,len(x1)+len(y1)+len(x1+y1)+2);//+2是加的运算符和等于号 
        if(r=='c') 
            printf("%d*%d=%d\n%d",x1,y1,x1*y1,len(x1)+len(y1)+len(x1*y1)+2);
        if(r=='b') 
            printf("%d-%d=%d\n%d",x1,y1,x1-y1,len(x1)+len(y1)+len(x1-y1)+2);

        if(p<n) printf("\n");
    }   
    return 0;

}

by wmy_goes_to_thu @ 2020-11-30 17:59:50

别用gets了


by ASaltyFish @ 2020-11-30 19:08:05

@wangmaohua20090908 啊,问题就出在gets上吗...


by ASaltyFish @ 2020-11-30 19:45:00

换成cin.getline试了一下,还是爆0啊/(ㄒoㄒ)/~~


|