在C ++中比较Argument和Integer

时间:2016-02-21 23:54:38

标签: c++ parameters

我正在玩命令行参数,我一直试图在参数编号和输入之间进行比较。因此,如果某人输入1,则输出将为"难度级别为1"。

#include <iostream>
#include <cstring>
using namespace std;
int main(ijnt argc, char* argv[])
{
int a; 
if (argc[1] == '1')
    {
    cout << "The difficulty level is " << argv[1] << endl;
    return 1;
    }
}

我将比较1作为char,但我得到错误&#34; ISO C ++禁止指针和整数之间的比较[-fpermissive]&#34;并说错误是

if (argv[1] == '1')

如何获得与之相比较的1,被接受为char?

3 个答案:

答案 0 :(得分:1)

argv是一个字符数组数组......

所以,使用strcmp并进行比较,或者更好的是,将其转换为std::string并进行比较......但同时确保argc大于1.示例:< / p>

#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char* argv[])
{
int a; 
if (argc > 1 && strcmp(argv[1], "1") == 0)
    {
    cout << "The difficulty level is " << argv[1] << endl;
    return 1;
    }
}

#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
int a; 
if (argc > 1 && string(argv[1]) == "1")
    {
    cout << "The difficulty level is " << argv[1] << endl;
    return 1;
    }
}

答案 1 :(得分:1)

我认为你想要的是if (*argv[1] == '1')

答案 2 :(得分:0)

命令行参数是字符数组,因此您需要使用类似std::strcmp()的内容来比较它们:

int main(int argc, char* argv[])
{
    // check argument exists ...

    if(!std::strcmp(argv[1], "1")) // 0 when equal
    {
        // they are the same here
    }

    // ...
}

从arg

中创建一个`std :: string可能更简单
    if(std::string(argv[1]) == "1")
    {
        // they are the same here
    }

在所有情况下,请务必检查参数是否存在:

int main(int argc, char* argv[])
{
    if(!argv[1]) // argument not present (null terminated array)
    {
         std::cerr << "Expected an argument." << std::endl;
         return EXIT_FAILURE;
    }

    // process arg here

    // ...
}