我正在尝试编写一个接受命令行参数的应用程序,如1 + 2,计算并打印输出。我是c ++的新手,所以我写了一些代码 - 这是行不通的。我认为我的主要问题是缺乏知识,我无法弄清楚如何解析和转换这个表达式
1必须进入int / double +必须保留一个字符串才能通过switch语句 2必须进入int / double
我已经知道如果有空格那么每个参数将包含相应的字符串argv [2] =“1”argv [3] =“+”argv =“2”所以我现在需要的是将它们转换为正确的数据类型,以便我可以执行计算,我也尝试使用strtod进行转换但是每个都抛出异常,加上显然我不能按照它的方式编写switch语句,因此它需要是一个字符串。我对所有的转换感到非常困惑。如果我以正确的方式思考,请告诉我?
// Calculate.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <tchar.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
double oper1 = atof(argv[2]);
double oper2 = atof (argv[4]);
switch(char[3]){
case "+":
cout<< oper1 + oper2;
break;
}
return 0;
}
答案 0 :(得分:2)
试试这个
// Calculate.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <tchar.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
double coeff1 = atof(argv[1]);
double coeff2 = atof (argv[3]);
char op = argv[2][0];
switch(op){
case '+':
cout << coeff1 + coeff2 << endl;
break;
default:
cout << "unhandled operation " << argv[2] << endl;
break;
}
return 0;
}
请注意您的代码。
switch(char[3]){
不正确,你没有名为char的数组(你不可能是一个保留字)。
您无法打开字符串值,因此您必须将其设为char。
您的命令行参数是字符串。所以你从你的论点中读出第一个字符。
char op = argv[2][0];
在您的开关中,您现在可以使用
switch(op){
在您的案例陈述中
case "+":
错了。在&#34;&#34;是一个字符串,你必须使用&#39;&#39;为了一个字符
case '+':
其他人已经解释了这一点,但你的论点是从argv [1]开始的,arg [0]是程序的名称(尝试将其打印到cout)。因此,如果您调用可执行文件,例如。
Calculate 1 + 2
参数看起来像
argv[0] = "Calculate"
argv[1] = "1"
argv[2] = "+"
argv[3] = "2"
注意:该程序没有错误检查,如果没有至少3个命令行参数,它将崩溃。您可以使用argc来确定提供的命令行参数的数量。
答案 1 :(得分:1)
我建议这样的事情: (所有相关的包括)
using namespace std;
int main(int argc, char* argv[])
{
if(argc != 4) {
cout << "usage: calculate <op1> <operation> <op2>" << endl;
return 1;
}
double oper1( atof(argv[1]) );
double oper2( atof(argv[3]) );
string operation( argv[2] );
if(operation == "+") {
cout << oper1 + oper2;
} else if (operation == "-") {
cout << oper1 - oper2;
} else {
cout << "illegal operation '" << operation <<"'" << endl;
return 1;
}
return 0;
}
它不检查指定的有效浮点数