正在检查终端中的参数
Checking arguments in terminal
如何编写程序来检查终端中的参数是否正确?
例如,如果我有一个程序hello.cpp
,我想把它称为:
./hello yes 10
我希望程序确保第一个参数是yes或no,第二个参数是1-10之间的数字。那么,我如何将这些参数读入程序中进行检查呢?
谢谢!
argc
和argv
参数中的单个字符串传递给main()
。
int main(int argc, char *argv[])
{
...
}
只需检查argc
中的值和argv
中的字符串中的适当值。
您本来打算这样执行的/你好是的10
c中有一个选项argc和argv其中argc是传递的参数数,带索引的argv显示传递的参数本身。
看看下面的代码,了解如何遍历所有参数。
int main(int argc, char *argv[]){
int i = 0;
for (i = 0; i < argc; i++) {
printf("argv[%d] = %sn", i, argv[i]);
}
return 0;
}
正如其他用户所提到的,main
函数是程序的入口点,它从命令行获取数据的方式是通过其参数。
第一个int
参数是所有传递参数的计数,包括程序名称,第二个char **
参数是指向每个传递参数的指针,包括程序名:
int main
(
int argc, // <-- how many parameters has been provided?
char **argv, // <-- what values has each parameter?
)
{
...
return 0;
}
所以,知道了这一点,你的呼叫./hello yes 10
一定是这样的:
argc = 3
argv[0] = "./hello"
argv[1] = "yes"
argv[2] = "10"
名称argc
和argv
只是一种惯例,您可以随意命名它们,但保留每个人都使用的名称是一种很好的做法。
论点并不一定是int, char **
,他们必须遵循一个相当严格的惯例,借用这个答案:
它应该有一个int类型的返回类型,否则它的类型是实现定义的。所有实现都应允许以下main定义:int main()和int main(int argc,char*argv[])
知道了这一点,让我们专注于你的问题:
首先,您必须确保传递了2个参数,因此必须检查argc
值,并确保它恰好等于3
。
第一个参数是yes或no
接下来,您必须将argv[1]
(因为0
包含程序名)存储到字符串中,并将其与值"yes"
和"no"
:进行比较
std::string YesOrNo(argv[1]);
if (YesOrNo == "yes" || YesOrNo == "no")
最后,您必须将argv[2]
存储为一个整数,并检查它是否等于或小于10
:
std::stringstream Stream;
int Value = 0;
Stream << argv[2];
Stream >> Value;
if (Value <= 10)
因此,结果是:
int main(int argc, char **argv)
{
if (argc == 3)
{
std::string YesOrNo(argv[1]);
if (YesOrNo == "yes" || YesOrNo == "no")
{
std::stringstream Stream;
int Value = 0;
Stream << argv[2];
Stream >> Value;
if (Value <= 10)
{
// Your stuff..
}
}
}
return 0;
}
我让你处理所有大写和小写的东西,以及数字参数的误报,至少我不会做所有你的作业;)
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 如何在linux终端中同时编译和运行c++代码
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 在CLion中使用CMake编译带有参数的C++会引发错误,而在终端中编译则不会
- 我可以使用use_lazy_terminal对获得3个参数懒惰的终端的第一个参数
- 比较终端中通过char *argv []的参数
- 正在检查终端中的参数
- ubuntu终端中的c++命令行参数
- 我在我的程序中添加了一个void函数,它不接受任何参数,现在我的程序在运行时只返回一个空白终端
- 如何从终端启动C应用程序,并将参数传递给int main(int argc,char*argv[])