c - 我怎样才能只得到一个数字作为主函数的参数?
问题描述
我对 isdigit() 有疑问。对于一个练习,我只需要将一个数值传递给 main 函数。这意味着我不能通过“3 4 5”也不能通过“你好”。我的代码可以正常使用这些示例,但它不能使用值“2x”,即使它使用值“x2”也是如此。
这是代码:
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
int main (int argc, string argv[])
{
if ((argc == 2) && isdigit(*argv[1]))
{
printf("%s \n", argv[1]);
printf("%i \n", argc);
}
else
{
printf("You have to use only one numeric value \n");
}
}
我试图改变if ((argc == 2) && isdigit(*argv[1]))
成if ((argc == 2) && isdigit(argv[1]))
,但我不断得到Segmentation fault
。
请你帮助我好吗?非常感谢!
解决方案
isdigit(int character)
只检查一个值。您可以看到,因为您必须*argv[1]
传递argv
. 的第一个字符2x
是2
让你的程序按预期运行。
您可以做的是获取输入的长度,strlen(argv[1])
然后使用循环检查字符串中的所有字符是否都是数字。然而,这仅适用于十进制整数。
推荐阅读
- javascript - 如何使用 Node.JS/Javascript 在 JSON 文件中编辑奇异值
- r - 如何使用列表名称列表创建新列表
- javascript - 如何检查 window.addEventListener("message") 的消息是否来自特定的 iframe
- javascript - 在 iOS 浏览器中,获取到的 screenY 不正确,它的值与 pageY 相同
- reactjs - 自定义节点未正确渲染连接器的边缘
- linux - 关于 GPIO 导出
- delphi - Linux下Delphi Indy10 TCPServer断开连接失败
- c - 完全释放链表的问题
- powerbi - 在 PowerBI 中更新书签
- c# - 放弃会话并在注销时清除缓存的最佳方法是什么