如果没有int / long参数,则不打印sum

问题描述 投票:1回答:1

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

但仍然像./sum 1 3 abc 4这样的命令应该工作并打印出和为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个回答
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;声明:你不需要一个循环结束;这是隐含的。

© www.soinside.com 2019 - 2024. All rights reserved.