我如何在命令行中传递特定类型的数字?

时间:2017-04-03 02:51:02

标签: c command-line integer

我理解如何通过命令行传递一个整数,但是如果我需要一个特定的整数范围,我该如何做呢?

例如,我有一个程序接受一系列数字并将它们除以5。数字必须在30-105之间,并且必须是5的倍数。

如果超出该范围的任何数字且不是5的倍数,则会出现错误消息。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

你基本上要做三件事:

  1. 从命令行获取所有数字
  2. 检查它们是否有效
  3. 必要时打印错误消息
  4. 首先让我们排除第2位,检查有效性。

    bool isValid(int number) {
        return (number >= 30 && number <= 105 && number % 5 == 0);
    }
    

    此功能检查给定的数字是否符合您的标准;大于或等于30,小于或等于105,并可被5整除。现在,我们必须使用该函数来验证参数。

    要做到这一点,我们必须遍历所有这些并检查它们是否有效,并在第一次错误时中止。

    #include <stdbool.h>
    #include <stdlib.h>    
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        for (int i = 1; i != argc; ++i) {
            int number = atoi(argv[i]);
            if (!isValid(number)) {
                puts("Error!");
                break;
            } else {
                // do something
             }
         }
    }
    

    如果您想保留有效数字,则必须将它们存储在else - 分支的数组中。

    修改 阅读你的评论让我觉得你不想从实际的命令行中获取数字(如在./myProgram 30 40 50中),而是从程序本身的提示中获取数字。

    一次获得一个号码,我们必须:

    1. 打印提示
    2. 读一个数字
    3. 检查它是否有效
    4. 我们可以在一个函数中隔离它,但为了保持简短,我不会那样做并且无耻地将它放在main中。

      #include <stdbool.h>
      #include <stdlib.h>
      #include <stdio.h>
      
      int main() {
          int number;
      
          while (true) {
              printf("Enter a number: ");
              scanf("%d", &number);
      
              if (isValid(number)) {
                  break;
              } else {
                  puts("Not a valid number!");
              }
          }
      
          // do something
      }