Неверный аргумент с C ++ stod () - PullRequest
0 голосов
/ 18 октября 2018

Я новичок в кодировании. То, что я пытаюсь сделать, это калькулятор. То, что делает программа, берет весь ввод в виде строки и затем разбивает строку на части. Например, первая часть - это число,вторая часть - опоратор, а третья - другое число.

Итак, я создал простую функцию с именем (extract_number). Программа, кажется, компилируется без ошибок, но когда я даю ввод, такой как 55.5 + 66.5я получаю некоторую ошибку, как показано ниже,

завершается вызов после выброса экземпляра 'std :: invalid_argument'

what (): stod

Это приложение запросилоВремя выполнения, чтобы прекратить его необычным способом.Для получения дополнительной информации обратитесь в службу поддержки приложения.

Процесс вернул 3 (0x3) время выполнения: 8,003 с Нажмите любую клавишу для продолжения.

Вот мой код,

#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 голосов
/ 18 октября 2018

Вы можете сделать так, как предложил @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);
}
...