Добавил:
alex20000
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:sem9_2
.c#include <stdio.h>
int num_lines(FILE* f);//ф-ция, считающая кол-вл строк
int main(int argc, char** argv)
{
if(argc != 3)//если кол-во аргументов не равно 3
{
puts("usage: sem9_2 <filename1> <filename2>");
return 0;
}
FILE *f1, *f2;
f1 = fopen(argv[1], "r");//открываем файлы
f2 = fopen(argv[2], "r");
int len1 = num_lines(f1);//считаем кол-во втрок в файлах
int len2 = num_lines(f2);
int c = 0;
FILE* currf = f1;//"указатель" на файл, который будет чередовать 1 и 2 файл
do
{
c = '\n';
do
{//выводим строку из файла currf
putchar(c);
c = fgetc(currf);
}while((c != '\n') && (c != EOF));
if(currf == f1)
{
len1--;//уменьшаем кол-во оставшихся строк в 1 файле
if(len2 > 0)
currf = f2;//если в другом файле еще есть невыведенные строки меняем currf на другой файл
}
else
{
len2--;//уменьшаем кол-во оставшихся строк в 2 файле
if(len1 > 0)//если в другом файле еще есть невыведенные строки меняем currf на другой файл
currf = f1;
}
}while((len1 > 0) || (len2 > 0));//поха хотя бы в 1 файле остались невыведенные строки
putchar('\n');
return 0;
}
int num_lines(FILE* f)
{
int c = 0;
int lines_count = 0;
do//проходим по всем символам файла
{
c = fgetc(f);
if(c == '\n')//если символ перехода на новую строку - увеличиваем кол-во строк
lines_count++;
}while(c != EOF);
fseek(f, 0, SEEK_SET); //переходим в начало файла
return lines_count;
}