我想知道是否可以检测是否没有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;
语句:您在循环结束时不需要一个语句;这是暗示的。