C - 检查给定参数是不是为自然数

Posted

技术标签:

【中文标题】C - 检查给定参数是不是为自然数【英文标题】:C - Check if given argument is natural numberC - 检查给定参数是否为自然数 【发布时间】:2020-12-06 15:55:11 【问题描述】:

我应该如何正确检查给定参数是否是 C 中的 自然数?当谈到 C 时,我是一个非常初学者......我已经通过 atoi(argv[1]) == 1 将该参数与 1 和 2 进行了比较...,但是当我通过让我们说 1.2137 作为参数时, atoi将其削减为 1。 感谢您的帮助。

【问题讨论】:

atoi 代表“Ascii to Integer”,表示只有整数,如果要浮点数,可以使用atof 与我们分享一些代码 或者更好的是,strtod 用于具有一些验证的功能。 没错,但我不想要浮点数,只想检查它是否不是浮点数 strtol() 是一个更高级的函数,可以检查输入。 【参考方案1】:

您可以使用标题 stdlib.h 中的 long strtol(const char* nptr, char** endptr, int base) 来检查您的整个字符串是否可以转换为数字:

char* end;
strtol( argv[1], &end, 10 );
if( *end == '\0' )
    printf( "String is a natural number\n" );
 else 
    printf( "String is not a natural number\n" );

另一种方法是检查不是“+”、“-”或数字的字符

bool valid = true;
for( const char* it = argv[1]; *it; ++it )
    if(!(( *it >= '0' && *it <= '9' ) || *it == '+' || *it == '-' ))
        valid = false;
    

printf( "String is%s a natural number\n", valid ? "" : " not" );

【讨论】:

请注意,strtol() 会跳过前导空格,因此如果 OP 想要拒绝带有前导空格的字符串,他们需要补充 strtol() 并对此进行测试。 负整数不属于自然数集合,该集合仅由正整数组成。

以上是关于C - 检查给定参数是不是为自然数的主要内容,如果未能解决你的问题,请参考以下文章

矩阵乘法

四则运算 Java 杨辉鹏,郑冠华

c++两个自然数(输入的十进制数转换为二进制时,两个数的位数相同。) 输出:有效则有效,无效则无效

四则运算程序(java基于控制台)

结对编程-四则运算生成器(java实现)

什么是函数调用?C语言