c - 检查 argc 和 argv cs50 的功能
问题描述
尝试编写将检查 agrc == 2 的函数, argv[1] 不是负数,并且 argv[1] 中只有数字,否则主程序将无法运行,我们键入类似“错误!用法:./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\n");
return 0;
}
else
{
printf("Usage: ./code key\n");
return 1;
}
}
}
else
{
printf("Usage: ./code key\n");
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 而不是检查 y[1] .. . 等等,所以我的菜鸟解决方案是添加另一个 int veriable counter = 0
for exaple 和
if(isdigit(y[i]))
{
coounter++;
if (counter == yl)
{
printf("we good\n");
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\n");
return true;
}
}
}
printf("Usage: ./caesar key\n");
return false;
}
推荐阅读
- c - 使用 C 的 select() 系统调用为 UDP 应用程序创建多个客户端和一个服务器
- aws-lambda - 如何从 Quarkus REST API 中访问 lambda 执行上下文?
- kubernetes - Pod 状态 CrashLoopBackOff
- centos - 如何在 CentOS6 上安装 rabbitmq
- javascript - props 的值与回调函数中发送的值不同
- mysql - 将两个查询结果合并在一个表中但在两列中
- angular - TypeScript - 等到 array.sort 完成
- xml - 选择属性的所有值并使用 XSLT 1.0 作为列表返回
- java - 突出显示方括号内的文本(正则表达式?)Android kotlin
- php - 将密钥组合为唯一集的重复密钥失效