我试图通过遍历argv [1]中的每个字符并将它们放入isdigit()来检查argv [1]是否为整数。从技术上讲,它可以工作,但不完全是我想要的方式。
这是我的代码。
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("Usage: ./caesar key\n");
return 1;
}
else
{
for (int i = 0; i < strlen(argv[1]); i++)
{
if( !isdigit(argv[1][i]))
{
printf("Usage: ./caesar key\n");
return 1;
}
else
{
printf("Sucess\n");
printf("%s\n", argv[1]);
}
}
}
}
如您所见,通过遍历字符串,程序将为每个字符打印出新的响应行。我想知道是否还有另一种方法来验证输入并只打印一次响应?
$ ./caesar 20
Sucess
20
Sucess
20
$
$ ./caser xyz
bash: ./caser: No such file or directory
$ ./caesar 20
Sucess
20
Sucess
20
$ ./caesar xyz
Usage: ./caesar key
$ ./caesar 20x
Sucess
20x
Sucess
20x
Usage: ./caesar key
$
答案 0 :(得分:1)
由于return
退出了该功能,因此在包含else
的{{1}}分支之后,无需使用if
–如果采用了return
路径,在if
继续运行后什么也没有。
if
从那时起,当检查完所有数字后,可能会更容易看到在循环后移动成功消息的安全性。
int main(int argc, string argv[])
{
if (argc != 2)
{
printf("Usage: ./caesar key\n");
return 1;
}
for (int i = 0; i < strlen(argv[1]); i++)
{
if (!isdigit(argv[1][i]))
{
printf("Usage: ./caesar key\n");
return 1;
}
printf("Sucess\n");
printf("%s\n", argv[1]);
}
}