Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查变量在C中是字符串还是整数_C - Fatal编程技术网

检查变量在C中是字符串还是整数

检查变量在C中是字符串还是整数,c,C,我正在写一个C程序,我必须通过命令行读取参数。 如何检查传递给程序的参数是字符串(即字符数组)还是整数? 在C语言中有没有即时呼叫 如何检查传递给程序的参数是字符串(即字符数组)还是整数 命令行参数总是作为字符串传递给C程序。由您自己决定一个参数是否代表一个数字 int is_number(char const* arg) { // Add the logic to check whether arg is a number // The code here can be simpl

我正在写一个C程序,我必须通过命令行读取参数。 如何检查传递给程序的参数是字符串(即字符数组)还是整数? 在C语言中有没有即时呼叫

如何检查传递给程序的参数是字符串(即字符数组)还是整数

命令行参数总是作为字符串传递给C程序。由您自己决定一个参数是否代表一个数字

int is_number(char const* arg)
{
   // Add the logic to check whether arg is a number
   // The code here can be simple or complex depending on the 
   // level of checking that is necessary.
   // Should we return true or false if the argument is "1abc"?

   // This is a very simple test.
   int n;
   return (sscanf(arg, "%d", &n) == 1);
}

int main(int argc, char** argv) // argv is array of strings.
{
   int i = 0;
   for ( i = 1; i < argc; ++i )
   {
      if ( is_number(argv[i]) )
      {
         // Use the argument.
      }
   }
}
int是字符数(字符常量*arg)
{
//添加逻辑以检查arg是否为数字
//这里的代码可以是简单的,也可以是复杂的,具体取决于
//必要的检查级别。
//如果参数为“1abc”,我们应该返回true还是false?
//这是一个非常简单的测试。
int n;
返回值(sscanf(参数、%d、&n)==1);
}
int main(int argc,char**argv)//argv是字符串数组。
{
int i=0;
对于(i=1;i
您可以对字符串的每个字符调用
isdigit()
,如果它对所有字符都是真的,则有一个整数,否则它就是一些字母数字字符串


您还可以调用
strtol
将字符串解析为整数。第二个参数返回指向字符串中第一个非数字字符的指针。如果它指向第一个字符,则它不是整数。如果它指向末尾,则为整数。如果它在中间某个点,它是一个整数,后面是一个非数字字符序列。由命令行传递的

< P>参数总是字符串,如果要检查这个字符串是否可以转换成整数,则可以使用<代码> Strtol < /C> >:< /P>
char *ptr = argv[1];
long num;

num = strtol(ptr, &ptr, 10);
if (*ptr == '\0')
    /* arg is a number */
else
    /* arg is NOT a number */

您可以尝试检查所有字符串是否都在0-9之间的数字范围内。例如,请检查此程序:

#include <stdio.h>

int checkString(char *Str)
{
    char *ptr = Str;

    while( *ptr )
    {
        // check if string characters are within the range of numbers

        if( ! (*ptr >= 0x30 && *ptr <= 0x39 ) )
        {
            return 0;
        }
        ptr++;
    }

    return 1;
}

int main(int argc,char *argv[])
{
    // does argv[1] consist entirely of numbers ?

    if( checkString(argv[1]) )
    {
        /* if it does , do something */
        puts("success");
    }
    else
    {
        /* do something else */
    }

    return 0;
}
#包括
int校验字符串(char*Str)
{
char*ptr=Str;
while(*ptr)
{
//检查字符串是否在数字范围内

如果(!(*ptr>=0x30&&&ptr,它将始终是一个字符串。除非你的意思是它必须只包含字母表;没有数字或符号。为什么要写0x30和0x39来表示从0到9的字符?另外,这种方式独立于体系结构和实现吗?这是一篇老文章。我不记得确切的原因了!