C++ 程序读取 '*' 为 'a'

标签 c++ pointers command-line char command-line-arguments

我正在开发一个简短的小计算器程序,它接受命令行参数并执行相关操作。除乘法外,一切正常。

当我在命令行中键入“./calc 3 * 3”时,程序报错,当我“cout”它存储为运算符的字符时,它显示“a”。所有其他运营商工作正常。

你们能弄清楚为什么它不接受“*”作为字符吗?

这是代码和一些示例输出:

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

const int MINIMUM_ARGUMENTS = 4; //must have at least 4 arguments: execution command, a first number, the operator, and a second number;

double Add(double x, double y);
double Subtract(double x, double y);
double Multiply(double x, double y);
double Divide(double x, double y);

int main(int argc, char* argv[])
{
    if (argc < MINIMUM_ARGUMENTS) //"less than" because counting execution command as first argument
    {
        cout << "\nMust have at least " << MINIMUM_ARGUMENTS << " arguments (including execution command)." << endl;
    }
    else
    {
        double num1 = atof(argv[1]); //stores first argument as double
        char operation = *argv[2]; //stores second argument (operator) as char
        double num2 = atof(argv[3]); //stores third argument - second number
        double result = 0; //will store result of arithmetic    

        cout << '\n';

        switch (operation) //determines which function to call based on the char (operator) argument
        {
        case '+':
            result = Add(num1, num2);
            cout << result << endl;
            break;
        case '-':
            result = Subtract(num1, num2);
            cout << result << endl;
            break;
        case '*':
            result = Multiply(num1, num2);
            cout << result << endl;
            break;
        case '/':
            result = Divide(num1, num2);
            cout << result << endl;
            break;
        default:
            cout << "Error." << endl;           
        }   
    }

    cin.clear();
    cout << "\nPress enter to quit." << endl;
    cin.ignore();

    return 0;
}

double Add(double x, double y)
{
    return x + y;
}

double Subtract(double x, double y)
{
    return x - y;
}

double Multiply(double x, double y)
{
    return x * y;
}

double Divide(double x, double y)
{
    return x / y;
}

示例输出:

-bash-4.1$ ./calc 10 - 5

5

Press enter to quit.

-bash-4.1$ ./calc 4 + 9

13

Press enter to quit.

-bash-4.1$ ./calc 10 / 2

5

Press enter to quit.

-bash-4.1$ ./calc 5 * 5

Error.

Press enter to quit.

最佳答案

操作系统(此处为 bash)使用 * 符号从当前目录中选择所有文件。所以改变你的标志。

我建议'x'

关于C++ 程序读取 '*' 为 'a',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25758050/

相关文章:

pointers - 满足接口(interface)的 Go 结构方法类型

c - C 中的指针实现细节

c++ - 为什么 -mmacosx-version-min=10.10 不阻止使用标记为从 10.11 开始的函数?

c++ - Windows/C++中是否有 'restart'函数

c++ - 交叉编译树莓派

c++ - 在 C++ 的析构函数中删除指针后,将 NULL 分配给指针是否有任何用处?

c# - TFS 2012 以递归方式设置继承

perl - 从另一个文件中的列表替换文件中的文本?

python - 在 Mac OSX 10.6.8 上安全地从 usr/local/bin 中删除程序?

c++ - 使用类属性值作为方法默认参数的替代方法?