Для начала, вы получаете неверные аргументы в своем коде. Если вы хотите запустить вашу программу, например ./sort <option> <filename>
, то вы не используете stdin
для получения этих аргументов.
Аргументы в программе на C передаются в main с использованием следующей сигнатуры функции:
int main(int argc, char *argv[])
argc
- количество аргументов командной строки, переданных программе, а argv
- массив строк этих аргументов.
С пробегом ./sort 5 test.in
:
argc
будет равно 3
argv[0]
будет "./sort"
argv[1]
будет "5"
argv[2]
будет "test.in"
Вам следует проверить, что значение argc
равно 3, чтобы убедиться, что передано 2 аргумента ("5"
, "test.in"
), а также имя файла ("./sort"
) в общей сложности 3.
Если вы хотите иметь необязательные поля, было бы лучше иметь их после обязательных, или еще лучше использовать что-то вроде getopt , где вместо этого вы могли бы иметь что-то вроде: ./sort --file test.in
или ./sort --opt 5 --file test.in
, Это, вероятно, не нужно для этого случая, но это вариант.
Вы можете анализировать целочисленную опцию, используя atoi
или strtol
, как вам угодно, чтобы преобразовать ее из строки (char*
) в целочисленный тип и fopen
, fgets
, fclose
для чтения из входной файл.