arrays - 在 C 中读取命令行参数并检查它是否为数字
问题描述
关于我的目标的详细信息
在 C 语言中,我的程序应该从命令行获取输入,读取它,确保它是一个数字,如果为真,则打印出“成功”,如果为假,则打印出“用法:./caesar key”。
预期成绩
./caesar 33
Success
或者
./caesar zzz
Usage: ./caesar key
实际结果
./caesar 33
Segmentation error
我试过的
int main (int argc, string argv[])
{
if (argc == 2)
{
if (isdigit(argv[1]))
{
printf("Success\n");
return 0;
}
或者
if (argc == 2)
{
if (isdigit(argv[0][1]))
{
printf("Success\n");
return 0;
}
或者
int main (int argc, string argv[])
{
if (argc == 2 && isdigit(argv[1]))
{
printf("Success\n");
return 0;
}
解决方案
你在这里做错的是你想检查整个字符串是否由数字组成,但是你将字符串本身传递给isdigit
,它需要一个char
. 您可以做的是手动遍历char
数组并检查每个char
是否是数字,或者您可以使用strspn
如下所示的函数。
strspn(argv[1], "0123456789") == strlen(argv[1])
这将比较参数中数字的跨度,如果它与字符串本身的长度相同,则返回 true。如果您想在参数中允许 + 和 - 符号,请使用"-+0123456789"
inside strspn
,尽管这会导致类似情况的误报+++++
(如下面的@dreamcrash 所述),这就是为什么定义自定义函数始终是更好的选择。strspn
和函数都strlen
在string.h
标题中可用。
推荐阅读
- typescript - TypeScript:在数据类型和函数上使用类型参数来配置可变性?
- microservices - 使客户端处理微服务最终一致性的最佳实践
- javascript - 在 vuejs 或 javascript 中合并两个多维数组
- amazon-web-services - 我们可以从 .NET 应用程序访问 AWS Quantum DB (QLDB) 数据库吗?
- npm - 如何修复模块构建失败 - 未捕获的错误:模块构建失败(来自 ./node_modules/babel-loader/lib/index.js):
- c++ - 有什么方法可以检查在 C 中的缓冲区中写入了多少数据/字节
- javascript - 为什么'this'未定义
- prometheus - 如何限制特定时间范围内的普罗米修斯数据聚合?
- perl - 用德语创建月份缩写 - Perl
- flutter - Flutter:如何更改系统导航栏颜色?