我正在开发一个简短的小计算器程序,它接受命令行参数并执行相关操作。除乘法外,一切正常。
当我在命令行中键入“./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/