如何修复:c++ Hackerank中调用的Abort ?


#include <bits/stdc++.h>
using namespace std;
string ltrim(const string &);
string rtrim(const string &);
/*
* Complete the 'maximumDraws' function below.
*
* The function is expected to return an INTEGER.
* The function accepts INTEGER n as parameter.
*/
int maximumDraws(int n) {
int t;
cin >> t;
int rez;
for (int i = 0; i < t; i++) {
cin >> n;
}   

for (int i = 0; i < t; i++) {
cout << n++ << endl;
}
return 0;
}
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
string t_temp;
getline(cin, t_temp);
int t = stoi(ltrim(rtrim(t_temp)));
for (int t_itr = 0; t_itr < t; t_itr++) {
string n_temp;
getline(cin, n_temp);
int n = stoi(ltrim(rtrim(n_temp)));
int result = maximumDraws(n);
fout << result << "n";
}
fout.close();
return 0;
}
string ltrim(const string &str) {
string s(str);
s.erase(
s.begin(),
find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace)))
);
return s;
}
string rtrim(const string &str) {
string s(str);
s.erase(
find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(),
s.end()
);
return s;
}

错误是:抛出std::invalid_argument实例后调用Abort: terminate…我试着补救,我试过了我一直试图解决这个问题3天,但每次用任何方法解决我得到这个错误。我在其他地方也问过,但没有得到相关的回答。拜托,我需要帮助,我怎么能解决它?

Hackerrank链接:https://www.hackerrank.com/challenges/maximum-draws/problem?isFullScreen=true

您的错误情况似乎是由于混合了"getline"one_answers";cin"。下面一行:

cin >> n;

基本上是捕获一个数字。最有可能的是,在输入该数字之后,按下返回键(回车键),然后包含一个换行符,该换行符不能从字符串转换为整数。这可能不完全是一个准确的说法,但按回车键的行为似乎是原因。

为了进行测试,我将简单的"cin>>t"one_answers"c>>n"使用"getline"调用。

int maximumDraws(int n)
{
int t;
string x_temp;
getline(cin, x_temp);
t = stoi(ltrim(rtrim(x_temp)));
int rez;
for (int i = 0; i < t; i++)
{
getline(cin, x_temp);
n = stoi(ltrim(rtrim(x_temp)));
}

这似乎解决了您的程序转储。

底线是要小心混合你的输入法。希望对你有帮助。

致意。

最新更新