gpt4 book ai didi

c - 如何编写自己的 isnumber() 函数?

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:28 27 4
gpt4 key购买 nike

我是 C 的新手,我正在考虑如何自己编写这个函数。我从命令行获取一个参数,所以它存储在 argv 数组中,我想决定它是否是数字。最简单的方法是什么?

谢谢

#include <stdio.h>

int isNumber(int *param)
{
if (*param > 0 && *param < 128)
return 1;
return 0;
}

int main(int argc, char *argv[])
{
if (argc == 2)
isNumber(argv[1]);
else printf("Not enought parameters.");

return 0;
}

最佳答案

了解 strtol(3) .您可以将其用作

bool isnumber(const char*s) {
char* e = NULL;
(void) strtol(s, &e, 0);
return e != NULL && *e == (char)0;
}

但这不是很有效(例如,对于具有一百万位数字的字符串),因为将进行无用的转换。

但事实上,你经常关心那个数字的值,所以你会在你的程序参数处理中调用 strtol(argv 参数到 main ) 并关心 strtol 的结果,即数字的实际值。

您使用了 strtol 可以更新(通过其第三个参数)指向已解析字符串中数字末尾的指针这一事实。如果该结束指针没有成为字符串的结尾,则转换以某种方式失败。

例如

int main (int argc, char**argv) {
long num = 0;
char* endp = NULL;
if (argc < 2)
{ fprintf(stderr, "missing program argument\n");
exit (EXIT_FAILURE); };
num = strtol (argv[1], endp);
if (endp == NULL || *endp != (char)0)
{ fprintf(stderr, "program argument %s is bad number\n", argv[1]);
exit (EXIT_FAILURE); };
if (num<0 || num>=128)
{ fprintf(stderr, "number %ld is out of bounds.\n", num);
exit(EXIT_FAILURE); };
do_something_with_number (num);
exit (EXIT_SUCCESS);
}

关于c - 如何编写自己的 isnumber() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19206660/

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