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正常用就行