Фон
argv[0]
- название программы.
argv[1]
- это параметр командной строки 1 st .
argv[2]
- это параметр командной строки 2 nd .
и т.д.
Итак:
- Начните цикл с
1
вместо 0
(то есть, j=0
неверно).
- Обязательно закройте файл сразу после прочтения и перед открытием следующего файла.
Алгоритм
Подумайте об алгоритме, прежде чем писать код.
- Установить счетчик на индекс первого аргумента.
- Открыть файл.
- Назначить дескриптор открытому файлу.
- Считать содержимое файла.
- Запишите (если требуется) содержимое файла.
- Закройте файл с помощью ручки.
- Увеличение счетчика.
- Цикл, пока не останется больше аргументов командной строки.
Теперь вы можете написать код.
Вы можете получить бонусные баллы, если включите обработку ошибок. (Что происходит, когда файл отсутствует, недоступен для чтения, файловая система повреждена или на компьютере не хватает памяти или дискового пространства?)
Объединение файлов
Если вы хотите объединить два имени файла с третьим, вам нужно переосмыслить алгоритм и то, что вам нужно. Существует разница между «прочитать первые два файла, указанные в командной строке, и записать их в третий файл» и «добавить все файлы, указанные в командной строке, в последний указанный файл».
Читать два, писать один
Алгоритм:
- Убедитесь, что есть ровно три параметра.
- Создать переменную дескриптора файла для третьего файла (вывод).
- Создать переменную дескриптора файла для первого файла (входная).
- Создать переменную дескриптора файла для второго файла (входная).
- Открыть первый файл для чтения.
- Откройте второй файл для чтения.
- Откройте третий файл для записи.
- Считать содержимое первого файла и записать его в третий файл.
- Считать содержимое второго файла и записать его в третий файл.
- Закройте третий файл.
- Закройте второй файл.
- Закройте первый файл.
В этот момент вы заметите много избыточности.
Чтение N, запись One
Этот алгоритм немного сложнее, но устраняет избыточность.
- Убедитесь, что есть хотя бы два параметра.
- Открыть последний файл для записи.
- Зацикливать каждое имя файла до, но не включая последнее имя файла:
- Открыть входной файл для чтения.
- Записать содержимое файла в последний файл.
- Закрыть входной файл.
- Закройте выходной файл.
Для этого вам нужно понять argc
и его связь с argv
. В псевдокоде:
if number_of_arguments < 2 then
print "This program concatenates files; two or more file names are required."
exit
end
int outfile = open arguments[ number_of_arguments ] for writing
int j = 1
while j < number_of_arguments do
int infile = open arguments[ j ] for reading
string contents = read infile
write contents to outfile
close infile
increment j
end
close outfile
Обучение
Если у вас возникли проблемы с синтаксисом языка C, поищите учебники. Например: