求助,为什么本地测试是对的,OJ里全部RE啊

P1957 口算练习题

zhi_hui_kan_ti_jie @ 2022-11-17 19:45:06

#include<stdio.h>
#include<string.h>
char str[50][20];
int arr[50];
int main()
{
    int n=0;
    scanf("%d\n",&n);
    char str1[20];
    char* blank[3];
    int ret;
    char* ret_s;
    int pre,cur;
    for(int j=0;j<n;j++)
    {
        gets(str1);
        blank[0] = str1;
        int count = 0;
        int len = strlen(str1);
        for(int i=0;i<len;i++)
        {
            if(str1[i]==' ')
            {
                count++;
                str1[i]='\0';
                blank[count]=&str1[i+1];
            }
        }
        if(count==1)
        {
            sscanf(blank[0],"%d",&pre);
            sscanf(blank[1],"%d",&cur);
            ret = pre+cur;
            sprintf(ret_s,"%d",ret);
            strcpy(str[j],blank[0]);
            strcat(str[j],"+");
            strcat(str[j],blank[1]);
            strcat(str[j],"=");
            strcat(str[j],ret_s);
            arr[j]=strlen(str[j]);
        }
        else if(count==2)
        {
            if(*blank[0]=='a')
            {
                sscanf(blank[1],"%d",&pre);
                sscanf(blank[2],"%d",&cur);
                ret = pre+cur;
                sprintf(ret_s,"%d",ret);
                strcpy(str[j],blank[1]);
                strcat(str[j],"+");
                strcat(str[j],blank[2]);
                strcat(str[j],"=");
                strcat(str[j],ret_s);
                arr[j]=strlen(str[j]);
            }
            else if(*blank[0]=='b')
            {
                sscanf(blank[1],"%d",&pre);
                sscanf(blank[2],"%d",&cur);
                ret = pre-cur;
                sprintf(ret_s,"%d",ret);
                strcpy(str[j],blank[1]);
                strcat(str[j],"-");
                strcat(str[j],blank[2]);
                strcat(str[j],"=");
                strcat(str[j],ret_s);
                arr[j]=strlen(str[j]);
            }
            else if(*blank[0]=='c')
            {
                sscanf(blank[1],"%d",&pre);
                sscanf(blank[2],"%d",&cur);
                ret = pre*cur;
                sprintf(ret_s,"%d",ret);
                strcpy(str[j],blank[1]);
                strcat(str[j],"*");
                strcat(str[j],blank[2]);
                strcat(str[j],"=");
                strcat(str[j],ret_s);
                arr[j]=strlen(str[j]);
            }
        }   
    }
    for(int i=0;i<n-1;i++)
    {
        printf("%s\n",str[i]);
        printf("%d\n",arr[i]);
    }
    printf("%s\n",str[n-1]);
    printf("%d",arr[n-1]);
    return 0;
}

by Xiphi @ 2022-11-17 19:57:24

@liuyizhe 不要用gets,有危险


by zhi_hui_kan_ti_jie @ 2022-11-17 20:48:51

@guo_jx 那怎么办啊,用scanf(" %[^n]")也不行


by Lny2010 @ 2022-11-18 17:44:06

蒟蒻看到了浅说下(第一次发没经验,望勿喷). 这个我认为可以用string类型,每次getline,这样处理字符串代码量会少点(?),然后如果想用printf的话可以用str.c_str(),返回一个字符串地址,这样就可以用字符串类型了. 对了我相信您用的是C++吧


|