我正在玩命令行参数,我一直试图在参数编号和输入之间进行比较。因此,如果某人输入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?
答案 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
// ...
}