读取C中的命令行参数并检查它是否为数字

内尔敏

有关我的目标的详细信息

在C语言中,我的程序应该从命令行获取输入,读取它,确保它是一个数字,然后如果输出为true,则输出“成功”,如果为false,则输出“用法:./ caesar key”。

预期成绩

./caesar 33
Success

要么

./caesar zzz
Usage: ./caesar key

实际结果

./caesar 33
Segmentation error

我尝试过的

 int main (int argc, string argv[])
 {
   if (argc == 2)
   {
      if (isdigit(argv[1]))
      {
        printf("Success\n");
        return 0;
      }

要么

if (argc == 2)
{
  if (isdigit(argv[0][1]))
  {
    printf("Success\n");
    return 0;
 }

要么

int main (int argc, string argv[])
{
   if (argc == 2 && isdigit(argv[1]))
   {
     printf("Success\n");
     return 0;
   }
梦境崩溃

如果不需要使用该isdigit函数,则可以使用@Param Siddharth建议strspn函数。但是,它们是使用

if (strspn(string, "-+0123456789") == strlen(string))

例如,like这样的值"-----"将被视为有效数字

如果要使用该isdigit函数,则需要遍历Stringchar中的所有s (而不是一次传递整个String),并检查其中每个是否确实是一个数字:

    ...
    int i, is_number = 1;
    for (i = 0; is_number && argv[1][i] != '\0'; i++){
        if(i == 0 && (argv[1][i] == '-' || argv[1][i] == '+')){
           continue;
        }   
        is_number = isdigit(string[i]);
     }
     // It should fail for Strings that are : empty, only "-" or "+"
    if(i == 0 || (i == 1 && !isdigit(argv[1][0])) || !is_number){
        printf("The String is not a Number \n");
        return 1;
     }
     printf("Success\n");
     return 0;
}

我测试了输入:

  • “-”,不是数字
  • “”,不是数字
  • “ -1”,数字
  • “ +1”,数字
  • “ + 1 + 1”不是数字

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章