正在检查终端中的参数

Checking arguments in terminal

本文关键字:参数 终端 检查      更新时间:2023-10-16

如何编写程序来检查终端中的参数是否正确?

例如,如果我有一个程序hello.cpp,我想把它称为:

./hello yes 10

我希望程序确保第一个参数是yes或no,第二个参数是1-10之间的数字。那么,我如何将这些参数读入程序中进行检查呢?

谢谢!

命令行参数作为计数传递,argcargv参数中的单个字符串传递给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"

名称argcargv只是一种惯例,您可以随意命名它们,但保留每个人都使用的名称是一种很好的做法。

论点并不一定是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;
}

我让你处理所有大写和小写的东西,以及数字参数的误报,至少我不会做所有你的作业;)