【发布时间】:2014-10-28 02:02:14
【问题描述】:
我正在尝试编写一个接受命令行参数(如 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;
}
【问题讨论】:
-
代码有很多问题。例如,在 C/C++ 中,数组索引从 0 开始,而不是 1。双引号表示字符串,而不是字符,并且 C++ 的 switch 语句不适用于字符串。语法“char[3]”也不会将 argv 数组的第四个元素转换为 char 类型。
-
@akton 至少我今天学到的一点是,当您传递命令行参数时,实际参数从数组的位置 2 开始。它说总是为实际命令保留 1,不确定 0 用于什么。我知道单引号和双引号的区别,我不明白为什么 char* 像字符串一样,但是如果我切换 char 并更改为单引号,它无论如何都不起作用
-
其实argv就是解析后的命令行,所以argv中的第一个元素(argv[0])通常是可执行文件名。请参阅stackoverflow.com/questions/2050961/… 了解更多信息。
-
@Jenny 参数确实从数组中的位置 2 开始。然而,在 C++ 中,这是索引 1(位置 1 是索引 0,通常是程序名称)。
-
argv[0] =命令,argv[1] =第一个参数