gpt4 book ai didi

c - 除了 for 循环之外,还有其他方法可以检查凯撒密码中是否为整数吗? CS50 pset2 凯撒密码

转载 作者:行者123 更新时间:2023-11-30 20:17:34 27 4
gpt4 key购买 nike

我试图通过循环 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]);
}
}
}
}

Code

正如您所见,通过循环字符串,程序为每个字符打印出一个新的响应行。我想知道是否有另一种方法来验证输入并只打印一次响应?

$ ./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
$

terminal

最佳答案

由于 return 退出函数,因此无需在包含 returnif 分支后使用 else > – 如果采用 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]);
}
}

从这一点上,可能会更容易看出,在检查完所有数字后,在循环之后移动成功消息是安全的。

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("Success\n");
printf("%s\n", argv[1]);
}

关于c - 除了 for 循环之外,还有其他方法可以检查凯撒密码中是否为整数吗? CS50 pset2 凯撒密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57025196/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com