将参数与 C++ 中的整数进行比较

Comparing an Argument with an Integer in C++

本文关键字:整数 比较 参数 C++      更新时间:2023-10-16

我正在玩命令行参数,我一直在尝试在参数编号和输入之间进行比较。因此,如果有人输入 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 做成字符,但我收到错误"ISO C++禁止在指针和整数 [-fallowive] 之间进行比较"并说错误是

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

我如何让正在比较的 1 被接受为字符?

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

因此,使用strcmp进行比较,或者更好的是,将其转换为std::string并进行比较......但也要确保argc大于 1。例:

#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;
    }
}

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

命令行参数是字符数组,因此您需要使用 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
    }
    // ...
}

参数中创建一个 '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
    // ...
}