Мне было интересно, можно ли было определить, не было ли аргументов командной строки int / long, а затем распечатать только сообщение об ошибке, а не сумму, равную 0.В приведенном ниже коде, если введенные аргументы командной строки ./sum abc
, он выведет сообщение об ошибке abc
, не являющееся целым числом, а затем выведет 0 для суммы, которую я не хочу.
Но все равно такая команда, как ./sum 1 3 abc 4
, должна работать и выводить сумму, равную 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 != '\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