洛谷IDE与洛谷测评机是否相同?

P1957 口算练习题

JRzyh @ 2023-08-24 20:40:39

代码在提交时RE,但IDE上正常

怀疑是getline的bug,所以同时问问有无可以替代getline(cin,str)的读入整行方式?

提交记录

代码:

#include<bits/stdc++.h>
using namespace std;
int pow10[9]={1,10,100,1000,10000,100000,1000000,10000000,100000000};
string solu(int a,int b,int op)
{
    int ans;
    string rt="";
    if(op==1)ans=a+b;
    if(op==2)ans=a-b;
    if(op==3)ans=a*b;
    if(ans<0)rt="-",ans=-ans;
    int sz=log(ans)/log(10);
    //cout<<ans<<endl;
    while(sz>=0)
    {
        //cout<<sz<<" ";
        rt+=(ans/pow10[sz])%10+'0';
        sz--;
    }
    return rt;
}
char opt[5];
int n,op;
string str;
int main()
{
    opt[1]='+';opt[2]='-';opt[3]='*';
    cin>>n;
    getchar();
    for(int j=1;j<=n;j++)
    {
        int st=0;
        getline(cin,str);
        //cout<<str<<endl; 
        if(str[0]=='a')op=1,st=2;
        if(str[0]=='b')op=2,st=2;
        if(str[0]=='c')op=3,st=2;
        //cout<<1;
            int a=0,b=0,i;
            string ans="";
            for(i=st;str[i]!=' ';i++)
            {
                a*=10;
                a+=(str[i]-'0');
                ans+=str[i];
                //cout<<str[i]<<endl;
            }
            //cout<<a<<endl;
            i++;
            ans+=opt[op];
            for(;i<str.size();i++)
            {
                b*=10;
                b+=(str[i]-'0');
                ans+=str[i];
                //cout<<str[i]<<endl;
            }
            //cout<<b<<endl;
            ans+='=';
            ans+=solu(a,b,op);
            //cout<<1;
            cout<<ans<<endl<<ans.size()<<endl;
    }
    return 0;
}

by cff_0102 @ 2023-08-24 20:43:27

@JRzyh 多加一个getchar就可以了,你会发现你WA了


by JRzyh @ 2023-08-24 20:44:17

@cff_0102 能讲讲为啥要加两个getchar吗(


by JRzyh @ 2023-08-24 20:44:38

因为\n\r?


by cff_0102 @ 2023-08-24 20:44:56

@JRzyh 可能是数据在win环境搞的,导致行末有 \r\n 两个字符


by JRzyh @ 2023-08-24 20:47:12

但是多加一个getchar在luoguIDE就不对了(

原来是IDE没问题的


by JRzyh @ 2023-08-24 20:48:30

多一个getchar就把第一个输入字符吃了……


by JRzyh @ 2023-08-24 20:54:02

已经确认RE点在内层第一个循环

for(i=st;str[i]!=' ';i++)
……

by flyWang @ 2023-09-10 17:42:38

我也遇见了这个问题,在vs上用一个getchar接回车就可以,但在洛谷得用两个getchar来接回车,getline正常用就行


|