このコードは自分のPC上で正常に動作しますが、オンラインジャッジ(Spoj)上でSIGABRTを表示しています。私はこの問題は、私が使用したときのgetlineでそれが受け入れられてしまっていると思う:getline(cin、s)によるSIGABRTエラー
input format: 52 + 81 = machula or 5machula + 81 = 133
string s1,s2,s3;
cin>>s1;
cin.ignore(3);
cin>>s2;
cin.ignore(3);
cin>>s3;
しかし、私は私がgetlineのに使用する必要があり、以前のSUBSTRを使用したい
string s,s1,s2,s3;
//cin.ignore(INT_MAX,'\n');
getline(cin,s);
int p1=0,p2,p3,l1,l2,l3;
l1=s.find("+")-1;
p2=s.find("+")+2;
l2=s.find("=")-s.find("+")-3;
p3=s.find("=")+2;
l3=s.length()-s.find("=")-2;
s1=s.substr(p1,l1);
s2=s.substr(p2,l2);
s3=s.substr(p3,l3);
「find()」が有効かどうかを確認してから、先に進んでください。 – user0042
もっと考えてみよう:世界中のほとんどの開発者が徹底的にテストした(使い方によって) 'std :: getline'や' std :: string'の不明なバグがあります。それが現実に合っていない(あるいは、あなたのコードにUBがあるかもしれません)か? [mcve](問題を再現するために使用された入力を含む)を入力してください。 –
値を読み取ろうとした後で*結果を使用する前に*入力が成功したかどうかを常に**確認する必要があります。 –