使用C ++ stod()的无效参数

时间:2018-10-18 12:03:16

标签: c++ invalid-argument

我是编码方面的新手,所以我想做的是一个计算器。程序要做的是将所有输入都作为字符串,然后将字符串分成几部分。例如,第一部分是数字,第二部分是主持人,第三部分是另一个数字。

所以,我创建了一个名为(extract_number)的简单函数。该程序似乎没有任何错误地进行编译,但是当我输入55.5 + 66.5之类的输入时,会出现如下错误,

  在抛出'std :: invalid_argument'实例后调用

terminate

     

what():站位

     

此应用程序已请求运行时以   不寻常的方式。请联系应用程序的支持团队以获取更多信息   信息。

     

进程返回3(0x3)执行时间:8.003 s按任意键   继续。

这是我的代码,

#include <iostream>
#include <string>


using namespace std;


double extract_number(string line,int &number_length)
{
    string temp;
    int start_length = number_length;

    for(int counter = number_length;counter != line.length();counter++)
    {
        if((line[counter] >= '0' && line[counter] <= '9') || line[counter] == '.')
        {
            number_length++;
        }else break;
    }

    for(int counter = start_length;counter != number_length;counter++)
    {
        temp[counter] = line[counter];
    }

    return stod(temp);
}


char extract_char(string line,int &number_length)
{
    string temp;
    char op;

    for(int counter = number_length;counter != line.length();counter++)
    {
        number_length++;
        if(line[counter] == '+' || line[counter] == '-' || line[counter] == '*' || line[counter] == '/')
        {
            op = line[counter];
            break;
        }
    }

    return op;
}

void header()
{
    system("cls");
    clog <<"\t\t   C++ Calculator\n"<<endl;
    clog <<"Enter Your Command/s: ";
}

int main()
{
    int number_length;
    string line;
    char op;
    double number,number2;

    header();

    while(true)
    {
        number_length = 0;
        getline(cin,line);

        number = extract_number(line,number_length);
        cout << number_length <<endl;
        op = extract_char(line,number_length);

        cout << number_length <<endl;
        number2 = extract_number(line,number_length);
        cout << number  << "     "<< op << "    " << number2 <<endl;

    }
    return 0;
}

如果有人能为我提供解决方案,我会很高兴。

1 个答案:

答案 0 :(得分:0)

您可以按照@Pete Becker的建议进行操作。或者,您可以在通话中添加“ + =“:

double extract_number(string line,int &number_length)
{
    string temp;
    int start_length = number_length;

    for(int counter = number_length;counter != line.length();counter++)
    {
        if((line[counter] >= '0' && line[counter] <= '9') || line[counter] == '.')
        {
            number_length++;
        }else break;
    }

    for(int counter = start_length;counter != number_length;counter++)
    {
        temp += line[counter];
    }

    return stod(temp);
}