простой код добавления с серьезной обработкой ошибок - PullRequest
0 голосов
/ 12 марта 2012

Я довольно новичок в c ++ и нахожусь в процессе написания простой программы дополнения.Пока у меня есть этот код, который работает только с числами для параметров:

int main(int argc, char *argv[])
{
    if (argc==1)
        cout << "email@gmail.com";

    if (argc==2)
        cout << "P";

        //addition function
        if (argc==3){

        float number1 = atof (argv[1]);
        float number2 = atof (argv[2]);

        cout << number1 + number2 << endl;
        }

    if (argc>3)
        cout << "P";

    return 0;

}

Как видите, я присваиваю значения аргументов переменным и добавляю их.Эти argvs - это то, что будет проверено, и они должны быть в состоянии справиться со всем.поэтому у меня есть несколько проблем:

-Если одна из переменных не является допустимым числом (например, 1 или 3000), как мне заставить мою программу подобрать это и действовать по нему?Чтобы быть действительным, число также не должно быть самим уравнением (например, дробь или что-то еще).

- если вводится странное действительное число (например, 3000.2 (обратите внимание на запятую)), при изменении этого значения на 3, какя могу изменить это?

так что да, подбросьте мне несколько встроенных методов проверки / обработки ошибок, и я всегда буду любить вас.

1 Ответ

0 голосов
/ 12 марта 2012

atof недостаточно для определения, представляет ли строка действительное число (например, для «0,25 лалала» она вернет 0,25).

Полное решение C ++: Первый: включите один дополнительный заголовок:

#include <sstream>
#include <iostream>
using namespace std;

Тогда в вашей main функции:

    //addition function
    if(argc==3)
    {
            float number1 = 0.0;
            float number2 = 0.0;
            istringstream istr(argv[1]);
            istr >> number1;
            if(istr.rdstate() != ios::eofbit)
            {/* argv[1] is not a valid float number */
            /* it works even if undeflow or overflow occures */
            }
            istr.clear();
            istr.str(argv[2]);
            istr >> number2;
            if(istr.rdstate() != ios::eofbit)
            {/* argv[2] is not a valid float number */
            /* it works even if undeflow or overflow occures */
            }

            cout << number1 + number2 << endl;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...