我正在编写一个C程序,我必须通过命令行读取参数。 如何检查传递给我的程序的参数是一个字符串(也就是一个字符数组)或整数? 我可以在C中立即拨打电话吗?
答案 0 :(得分:3)
你可以在字符串的每个字符上调用isdigit()
,如果对于所有字符都是真的,你有一个整数,否则它是一些字母数字字符串。
您也可以调用strtol
将字符串解析为整数。第二个参数返回指向字符串中第一个非数字字符的指针。如果它指向第一个字符,则它不是整数。如果它指向结尾,那么它是一个整数。如果它指向中间的某个位置,则它是一个整数,后跟一系列非数字字符。
答案 1 :(得分:0)
如何检查传递给我程序的参数是字符串(也就是字符数组)还是整数?
命令行参数始终作为字符串传递给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.
}
}
}
答案 2 :(得分:0)
命令行传递的参数总是字符串,如果要检查此字符串是否可以转换为整数,可以使用strtol
:
char *ptr = argv[1];
long num;
num = strtol(ptr, &ptr, 10);
if (*ptr == '\0')
/* arg is a number */
else
/* arg is NOT a number */
答案 3 :(得分:0)
您可以尝试检查所有字符串字符是否都在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;
}