gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:41 28 4
gpt4 key购买 nike

我想知道是否有可能检测是否没有 int/long 命令行参数然后只打印出错误消息而不是总和为 0。在下面的代码中,如果输入的命令行参数是./sum abc,那么它会打印出abc not being an 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

最佳答案

如果找到任何有效数字,请设置一个标志。启动 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; 语句:在循环结束时不需要;这是隐含的。

关于c - 如果没有 int/long 参数则不要打印出总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54936742/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com