Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将命令行参数解析/转换为不同类型_C++_Visual Studio 2012 - Fatal编程技术网

C++ 将命令行参数解析/转换为不同类型

C++ 将命令行参数解析/转换为不同类型,c++,visual-studio-2012,C++,Visual Studio 2012,我正在尝试编写一个应用程序,它接受命令行参数(如1+2),计算并打印输出。我对C++非常陌生,所以我编写了一些代码,这是行不通的。我认为我的主要问题是缺乏知识,我不知道如何解析和转换这个表达式 1必须进入整数/双精度 +必须保留字符串才能执行switch语句 2必须进入整数/双精度 我已经知道,如果有空格,那么每个参数将包含相应的字符串片段,其中argv[2]=“1”argv[3]=“+”argv=“2”,因此我现在需要的是将它们转换为正确的数据类型,以便我可以执行计算,我也尝试使用strtod

我正在尝试编写一个应用程序,它接受命令行参数(如1+2),计算并打印输出。我对C++非常陌生,所以我编写了一些代码,这是行不通的。我认为我的主要问题是缺乏知识,我不知道如何解析和转换这个表达式

1必须进入整数/双精度 +必须保留字符串才能执行switch语句 2必须进入整数/双精度

我已经知道,如果有空格,那么每个参数将包含相应的字符串片段,其中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;
}
//Calculate.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
双操作1=atof(argv[2]);
双操作2=atof(argv[4]);
开关(字符[3]){
格“+”:
试试这个

// 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;
}
是不正确的,您没有名为char的数组(并且您不能将其作为保留字)

不能打开字符串值,因此必须将其设置为char

您的命令行参数是字符串。因此,您从参数中读取第一个字符

char op = argv[2][0];
在您的交换机中,您现在可以使用

switch(op){
在你的陈述中

 case "+":
错误。“”中的任何内容都是字符串,必须使用“”作为字符

case '+':
其他人已经对此进行了解释,但您的参数是从argv[1]开始的,arg[0]是您的程序名(请尝试将其打印到cout)。因此,如果您像这样调用可执行文件

Calculate 1 + 2
这些论点看起来像

argv[0] = "Calculate"
argv[1] = "1"
argv[2] = "+"
argv[3] = "2"
注意:如果没有至少3个命令行参数,该程序将崩溃。您可以使用argc确定提供的命令行参数的数量。

尝试此操作

// 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;
}
是不正确的,您没有名为char的数组(并且您不能将其作为保留字)

不能打开字符串值,因此必须将其设置为char

您的命令行参数是字符串。因此,您从参数中读取第一个字符

char op = argv[2][0];
在您的交换机中,您现在可以使用

switch(op){
在你的陈述中

 case "+":
错误。“”中的任何内容都是字符串,必须使用“”作为字符

case '+':
其他人已经对此进行了解释,但您的参数是从argv[1]开始的,arg[0]是您的程序名(请尝试将其打印到cout)。因此,如果您像这样调用可执行文件

Calculate 1 + 2
这些论点看起来像

argv[0] = "Calculate"
argv[1] = "1"
argv[2] = "+"
argv[3] = "2"
注意:如果没有至少3个命令行参数,该程序将崩溃。您可以使用argc确定提供的命令行参数的数量。

尝试此操作

// 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;
}
是不正确的,您没有名为char的数组(并且您不能将其作为保留字)

不能打开字符串值,因此必须将其设置为char

您的命令行参数是字符串。因此,您从参数中读取第一个字符

char op = argv[2][0];
在您的交换机中,您现在可以使用

switch(op){
在你的陈述中

 case "+":
错误。“”中的任何内容都是字符串,必须使用“”作为字符

case '+':
其他人已经对此进行了解释,但您的参数是从argv[1]开始的,arg[0]是您的程序名(请尝试将其打印到cout)。因此,如果您像这样调用可执行文件

Calculate 1 + 2
这些论点看起来像

argv[0] = "Calculate"
argv[1] = "1"
argv[2] = "+"
argv[3] = "2"
注意:如果没有至少3个命令行参数,该程序将崩溃。您可以使用argc确定提供的命令行参数的数量。

尝试此操作

// 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;
}
是不正确的,您没有名为char的数组(并且您不能将其作为保留字)

不能打开字符串值,因此必须将其设置为char

您的命令行参数是字符串。因此,您从参数中读取第一个字符

char op = argv[2][0];
在您的交换机中,您现在可以使用

switch(op){
在你的陈述中

 case "+":
错误。“”中的任何内容都是字符串,必须使用“”作为字符

case '+':
其他人已经对此进行了解释,但您的参数是从argv[1]开始的,arg[0]是您的程序名(请尝试将其打印到cout)。因此,如果您像这样调用可执行文件

Calculate 1 + 2
这些论点看起来像

argv[0] = "Calculate"
argv[1] = "1"
argv[2] = "+"
argv[3] = "2"

注意:此程序具有零错误检查功能,如果没有至少3个命令行参数,它将崩溃。您可以使用argc确定提供的命令行参数的数量。

我建议这样做: (所有相关费用包括在内)

使用名称空间std;
int main(int argc,char*argv[])
{
如果(argc!=4){

我可以提出这样的建议: (所有相关费用包括在内)

使用名称空间std;
int main(int argc,char*argv[])
{
如果(argc!=4){

我可以提出这样的建议: (所有相关费用包括在内)

使用名称空间std;
int main(int argc,char*argv[])
{
如果(argc!=4){

我可以提出这样的建议: (所有相关费用包括在内)

使用名称空间std;
int main(int argc,char*argv[])
{
如果(argc!=4){

CUT有很多错误的代码。例如,在C/C++中,数组索引从0开始,而不是1。双引号表示字符串,而不是字符和C++切换语句在字符串上不起作用。语法“char(3)”也不会将argv数组的第四个元素转换为char类型。@akton至少我今天学到的是,当您传递命令行参数时,实际参数从数组的位置2开始。它表示始终为实际命令保留1,不确定0的用途。我知道单引号和双引号不同的是,我不明白为什么char*的行为像string,但如果我切换char并改为single quot