isdigit
применяется к int
, содержащему код символа, но выполняя isdigit(atoi(argv[1]))
, вы сначала пытаетесь преобразовать строку в целое число, поэтому это неправильно. Если вы используете isdigit
, это повторяется по всей строке.
atoi
молча возвращает 0, если аргумент не является допустимым целым числом, не используйте его.
Это не потому, что строка содержит только цифры, которым вы можете присвоить int
, потому что число может быть слишком большим для int
. Если вы принимаете отрицательное число, первым символом может быть -
, а не di git. Один из способов как преобразовать, так и проверить всю строку, представляющую действительное целое число, - это использовать strtol
, возвращающее long
.
Из этого, когда argc
не равно 2, вы должны прекратить выполнение, а не продолжить как и вы.