output(tv, k); //вывод массива телевизоров на экран
search(tv, goroda, k, &kg); //формирование массива городов
printf("Result:\n%d cities with the lowest price of the TV:\n",kg);
for(i=0; i<kg; i++)
puts(goroda[i]);
return 0;
}
Задача 4.2. Модифицировать программу таким образом, чтобы она вводила структуры из текстового файла и записывала результаты в файл.
В решении данной задачи приведены те описания данных и функции, которые будут отличаться от предыдущей задачи. На месте остальных функций расположены комментарии.
/* подключение библиотек, шаблоны структур, объявление констант аналогично первой части */
//формирование массива городов также аналогично части 1
//замена символа '\n' на '\0'
void zamena(char *str)
{ char *s; //указатель на текущий символ
s=str;
while (*s!='\n') s++;
*s='\0';
}
void input (tvSet *tv, int *k) //чтение данных из файла
{ char s[81]; int i;
FILE *fin;
printf("Enter input-file name: "); gets(s);
fin=fopen(s, "r");
if (fin==NULL)
{ printf ("No such file\n");
getchar();
}
Else
{ //на первой строке в файле расположено число структур
fscanf(fin, "%d", k);
FCLR; //пропуск символов до конца строки файла
for(i=0; i<*k; i++)
{ //каждое поле структуры занимает в файле отдельную строку
fgets(tv[i].name, Lmax, fin); zamena(tv[i].name);
fscanf(fin, "%d", &tv[i].price);
fscanf(fin, "%d", &tv[i].diag);
FCLR;
tv[i].color=fgetc(fin);
fgets(s, Lmax, fin);
fgets(tv[i].pr.gorod, Lmax, fin); zamena(tv[i].pr.gorod);
fgets(tv[i].pr.zavod, Lmax, fin); zamena(tv[i].pr.zavod);
fgets(tv[i].pr.fam, Lmax, fin);
}
fclose(fin);
}
}
//вывод данных на экран и формирование массива городов- аналогично
//предыдущей задаче
Main()
{ tvSet tv[Kmax];
int k, kg=0, i;
char goroda[Kmax][Lmax];
FILE *fout;
input(tv, &k); //ввод массива структур из файла
Output(tv, k); //вывод массива структур на экран
search(tv, goroda, k, &kg); //поиск городов
//вывод результата на экран и в файл
fout=fopen("result.txt", "w");
printf("Result:\n%d cities with the lowest price of the TV:\n", kg);
fprintf(fout, "Result:\n%d cities with the lowest price of the TV:\n",kg);
for (i=0; i<kg; i++)
{
puts(goroda[i]);
fprintf(fout, "%s\n", goroda[i]);
}
fclose(fout);
puts("Results saved in file: \"result.txt\"");
return 0;
}