如何编写程序来检查终端中的参数是否正确?
例如,如果我有一个程序hello.cpp
并且我想将其称为:
./hello yes 10
我希望程序确保第一个参数是或否,第二个参数是 1-10 之间的数字。那么如何将这些参数读入我的程序中进行检查呢?
谢谢!
命令行参数作为计数和单独的字符串argc
传递argv
给main()
.
int main(int argc, char *argv[])
{
...
}
只需检查 in 中的值argc
和字符串中argv
的适当值。
你的意思是这样执行,./hello yes 10
c 中有一个选项 argc 和 argv,其中 argc 是传递的参数的数量,带有索引的 argv 显示传递的参数本身。
看看下面的代码迭代所有参数。
int main(int argc, char *argv[]){
int i = 0;
for (i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", 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
。
第一个论点是是或否
接下来,您必须将您的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;
}
我让你处理所有大写和小写的东西以及带有数字参数的误报,至少我不会做你所有的功课;)