【问题标题】:How to fix: Abort called in C++ Hackerank?如何解决:在 C++ Hackerrank 中调用 Abort?
【发布时间】:2022-06-23 01:10:54
【问题描述】:
#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' 的实例后调用终止...我尝试解决此问题,我尝试过 我一直在尝试解决这个问题 3 天,但每次使用任何解决方法时都会出现此错误。我在其他地方问过,但没有得到相关答复。请问我需要帮助,我该如何解决?

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

【问题讨论】:

  • 用调试器在你的机器上运行你的代码,看看哪里抛出了异常。如果您没有检查代码是否有效,那么向hackerrank 提交任何解决方案都是没有意义的。
  • 你为什么在maximumDraws中执行用户输入?这似乎……很奇怪。但是话又说回来,我不确定它实际上应该做什么。现在看起来它做了一堆没有效果的输入,然后是一堆输出,然后无条件返回0
  • 类似std::stoi 的函数抛出“std::invalid_argument if no conversion can be executed”。检查你传递给它的参数。

标签: c++ arrays xcode algorithm web


【解决方案1】:

您的错误情况似乎是由于混合了“getline”和“cin”输入法而引起的。以下行:

cin >> n;

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

为了测试这一点,我用“getline”调用替换了简单的“cin >> t”和“cin >> n”代码。

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)));
    }

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

最重要的是要小心混合输入法。希望对您有所帮助。

问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多