c语言 - 如果没有 int/long 参数,则不要打印出总和



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

,但仍然是./sum 1 3 abc 4之类的命令应起作用,并打印出8个总和为8,以及abc的错误消息。

我唯一能想到的是,如果总和等于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 != ''){
                fprintf(stderr, "error: argument %s is not an intn", argv[i]);
                continue;
            }
        }

    }else{
        printf("no input received");
    }
    printf("%ld is sumn", sum);
    return 0;
}

当前输出

error: argument abc is not an int
0

所需的输出

error: argument abc is not an int

如果找到任何有效的数字,请设置标志。启动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 == ''){
                any_valid = true;
            }
            else {
                fprintf(stderr, "error: argument %s is not an intn", argv[i]);
            }
        }
    }else{
        printf("no input received");
    }
    if(any_valid) {
        printf("%ld is sumn", sum);
    }
    return 0;
}

这具有不打印未收到数字的总和的好优势。另外,我摆脱了continue;语句:您在循环结束时不需要一个语句;这是暗示的。

最新更新