Прежде всего, всегда инициализируйте ваши переменные, такие как kaylum и я, упомянутые в комментариях. В отличие от некоторых других языков программирования C не инициализирует ваши переменные для вас. Теперь для вопроса, который вы разместили, вы поняли, что идея в основном правильная, но есть вещи, которые я предлагаю вам изменить:
int n, numbers[n], firstNum;
на
int n = 0, numbers[1000], firstNum = 0;
Если вас это не устраивает Вы можете переместить числа [n] ниже, когда инициализируется n, но я бы не советовал этого. Вместо этого, поскольку вы изучаете C, посмотрите на динамически размещаемые массивы с помощью указателей. Некоторые ссылки, которые помогут вам понять указатели:
https://www.cprogramming.com/tutorial/c/lesson6.html https://www.tutorialspoint.com/cprogramming/c_pointers.htm
Далее посмотрите на ваш fopen
он имеет возвращаемое значение, которое сообщает вам, удалось ли открыть запрошенный вами файл.
Таким образом, вы можете добавить:
f = fopen(argv[1], "r");
if (f == NULL)
{
printf("File Not Found!");
return -1;
}
Измените условие, чтобы оно соответствовало способу обработки этой ошибки.
Когда вы читаете файл, пользователь указывает размер читаемого массива, но вы должны учитывать тот факт, что файл может не содержать точное количество элементов. Функция, которую вы используете fscanf
, может сообщить вам об этом, и это возвращаемое значение. Он вернет EOF
, что является специальным значением, которое переводится в конец файла.
Рассмотрите возможность изменения вашего fscanf следующим образом:
if (fscanf(f, "%d", &firstNum) == EOF)
{
printf("ERROR");
}
Или, если вы используете для l oop put break
Последнее, что вам не нужно явно использовать fscanf
для stdin
, пользователь указал, что он введет его через stdin
, так что вы можете просто также используйте scanf
. Надеюсь, что это поможет и удачи вам в ваших будущих C начинаниях.