Прежде всего, я говорю о старомодном ANSI-C (я имею в виду стандарт ANSI и не C99 или новее), скомпилированный с gcc. Мне разрешено использовать библиотеки, которые можно увидеть ниже в коде.Как проверить, являются ли параметры командной строки целыми числами
Моя проблема у меня есть программа, которая называется следующим образом на терминале:
program < integer_1 integer_2
В то время как я был в состоянии выяснить, как проверить число аргументов, я застрял при проверке, являются ли они целыми числами. Если программа называется так:
program < 1 -13
он должен работать без ропота, но если он выполняется так:
program < s 7
он должен выбросить ошибку.
Все, что я пробовал до сих пор, было полным мусором. Лучшее, что мне удалось до сих пор, было сообщение об ошибке, если второе число было символом. Ни одна из моих попыток не имела возможности иметь дело с более чем одной цифрой, но я выяснил, почему это так.
Проблема в том, что я не использовал аргументы командной строки/терминала с любым языком программирования i now (C++, Java). Я был бы очень признателен, если бы кто-нибудь мог показать мне, как проверить правильность ввода, так как я откровенен из идей.
Я исправлю, что если я хочу иметь дело с цифрами больше 9, мне нужно перебирать argv, начиная с индекса 2, пока не найду пробел?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int arc, char *argv[])
{
if(arc != 3)
{
printf("Error: You have entered %d arguments, but two were expected!", arc - 1);
return -1;
}
return 0;
}
Все аргументы командной строки являются строками. Вы можете преобразовать строки в целые числа, используя 'atoi()' без проверки ошибок, или используя 'strtol()' или один из его родственников с точной и чувствительной, но очень [деликатной проверкой ошибок] (http://stackoverflow.com/questions/14176123/правильно-использование-оф-strtol). Обратите внимание, что в ваших командных строках отображается '<', что означает, что оболочка пытается перенаправить стандартный ввод из файла с именем, заданным следующим аргументом ('1' и' s' в примерах) и удаляет оба '' ' и имя файла из командной строки. Вы должны просто удалить символ '<'. –