函数检查 argc 和 argv cs50。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数检查 argc 和 argv cs50。相关的知识,希望对你有一定的参考价值。
试图写一个函数来检查 agrc == 2 , argv[1] 不是负数,而且 argv[1] 中只有数字,否则主程序就不会运行,我们输入类似于 "Error! .代码键 "这样的信息,如果我们输入 "Error! .code key "所以如果我们输入.code -1或.code 123 gdf或.code 123sdf,我们将面临错误信息,主程序将无法运行,但如果我们输入.code 123,我们就会很好,程序将进一步运行。
int validkey(int argc, string y)
{
int yl = strlen(y);
if (argc == 2 && atoi(y) > 0) //atoi coverts string into int
{
for (int i = 0; i < yl; i++)
{
if (isdigit(y[i]))
{
printf("we good
");
return 0;
}
else
{
printf("Usage: ./code key
");
return 1;
}
}
}
else
{
printf("Usage: ./code key
");
return 1;
}
return 0;
}
所以,在主程序中,我们有这样的东西。if (validkey(argc,argv[1]))
但这个函数根本不工作,无论我们输入什么,它都不会破坏主程序(返回1;应该破坏它?),如果我们输入.code 123ads,它将通过检查并返回0;我做错了什么?
答案
好吧,我明白是哪里出了问题,首先最好用以下方法解决这个问题 bool
不 int
其次重要的是要了解如何循环工作。其检查 y[i]
而如果这 true
所以如果 y[0]
是数字循环不走了,不要检查了 y[1] y[2]
等,其停止和 returns 0
因此,如果我们输入2D3d循环将检查出 y[0]
它是2,所以它的数字,所以我们很好,并返回0,而不是cheking y[1]......等等,所以我的新手解决方案是添加另一个int veriable。counter = 0
举例来说
if(isdigit(y[i]))
{
coounter++;
if (counter == yl)
{
printf("we good
");
return 0;
}
}
所以最终变。
// check_the_key(argc, argv[1])
bool check_the_key(int argc, string argv)
{
// atoi coverts string into int
int key = atoi(argv);
if (argc == 2 && key > 0)
{
int counter = 0;
int lenv = strlen(argv);
for (int i = 0; i < lenv; i++)
{
if (isdigit(argv[i]))
{
counter++;
}
if (lenv == counter)
{
printf("we good
");
return true;
}
}
}
printf("Usage: ./caesar key
");
return false;
}
以上是关于函数检查 argc 和 argv cs50。的主要内容,如果未能解决你的问题,请参考以下文章