【问题标题】:If no int/long arguments then don't print out sum如果没有 int/long 参数,则不打印 sum
【发布时间】:2023-03-30 23:47:01
【问题描述】:

我想知道是否可以检测是否没有 int/long 命令行参数,然后只打印出错误消息而不是总和为 0。在下面的代码中,如果输入的命令行参数是./sum abc,那么它会打印出abc not be an int 的错误消息,然后它也会打印出总和的0,这是我不想要的。

但是像./sum 1 3 abc 4 这样的命令仍然可以工作并打印出 sum 为 8 以及abc 的错误消息。

我唯一能想到的是,如果 sum 等于 0,则不要将其打印出来。但是如果数字之和为零呢?

int main(int argc, char *argv[])
{
    long sum = 0;
    if(argc > 1){
        long i;
        char *ptr;
        char *endptr;
        for(i = 1; argv[i] != NULL; ++i){
            sum += strtol(argv[i], &endptr, 10);
            if(*endptr != '\0'){
                fprintf(stderr, "error: argument %s is not an int\n", argv[i]);
                continue;
            }
        }


    }else{
        printf("no input received");
    }

    printf("%ld is sum\n", sum);
    return 0;
}

电流输出

error: argument abc is not an int
0

期望的输出

error: argument abc is not an int

【问题讨论】:

    标签: c command-line sum arguments


    【解决方案1】:

    如果您找到任何有效数字,请设置一个标志。启动false,如果strtol() 成功,则将标志设置为true。如果是true,则仅在末尾打印总和。

    #include <stdbool.h>
    
    int main(int argc, char *argv[])
    {
        long sum = 0;
        bool any_valid = false;
    
        if(argc > 1){
            long i;
            char *ptr;
            char *endptr;
            for(i = 1; argv[i] != NULL; ++i){
                sum += strtol(argv[i], &endptr, 10);
                if(*endptr == '\0'){
                    any_valid = true;
                }
                else {
                    fprintf(stderr, "error: argument %s is not an int\n", argv[i]);
                }
            }
        }else{
            printf("no input received");
        }
    
        if(any_valid) {
            printf("%ld is sum\n", sum);
        }
        return 0;
    }
    

    这有一个很好的优势,即不打印没有收到数字的总和。我也去掉了continue; 语句:循环结束时不需要一个;这是暗示的。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2012-05-26
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多