Simple calculator using command line with C++

☆樱花仙子☆ 提交于 2019-12-02 08:16:59

The other answers are correct, but I'm going to pitch using strtod instead of atof in the name of Eris and because it's easier to check the input for correctness.

char * endp;
double firstNumber;
if (argv[1][0] != '\0')
{ // input string is not empty 
    firstNumber = strtod (argv[1], &endp);
    if (*endp != '\0')
    { // number didn't end at the end of the string. String not a number.
        cout << "First number was not a number, dude." << endl;
        return 0;
    }
}
else
{
    cout << "Can't do much without a number, dude." << endl;
    return 0;
}

With atof, the program can be called with "I'm the very model of a modern major-general" and produce results. Bad results, but results all the same.

Oh, and warning on calling exit in C++. The program stops dead right there, and no destructors are called. No harm here, but not a good habit to get into.

Here is the problem:

double firstNumber = atoi(argv[1]);
char theOperator = argv[2][0];
double secondNumber = atoi(argv[3]);

atoi converts a string to an int, so 2.5 will be converted to 2 and 1.25 will be converted to 1, that's why you get the result 2 + 1 = 3. Use atof instead.

The problem is how you transform the string in numbers: you are using atoi which like its name suggests transforms the input in a integer.

The solution is to simply replace this by atof which will read correctly floating-point numbers.

In the lines

double firstNumber = atoi(argv[1]);

and

double secondNumber = atoi(argv[3]);

atoi converts the parameter into an int (hence truncating after the decimal point). You need to convert it into a double. You should instead use std::atof, or, if using C++11, may also use std::stod(argv[1]);.

In addition to @meneldal suggestion, you can also use stringstream in C++ to convert from string to number

double value;
stringstream(someString) >> value;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!