Дан файл F, содержащий сведения об игрушках: название, стоимость в копейках, возрастные границы детей, для которых предназначена игрушка - C (СИ)
Формулировка задачи:
Дан файл F, содержащий сведения об игрушках: название, стоимость в копейках, возрастные границы детей, для которых предназначена игрушка. Получить сведения:
а) названия игрушек, цена которых не превышает 4 руб. и которые подходят детям 5 лет
б) названия наиболее дорогих игрушек (цена которых отличается от цены амой дорогой игрушки не более чем на 1 руб.)
в) названия игрушек, которые подходят детям как 4, так и 10 лет.
Решение задачи: «Дан файл F, содержащий сведения об игрушках: название, стоимость в копейках, возрастные границы детей, для которых предназначена игрушка»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
/*Дан файл F, содержащий сведения об игрушках: название, стоимость в копейках, возрастные границы детей, для которых предназначена игрушка. Получить сведения:
*/
void readfromfile(FILE *f);
void printtoy(char c);
struct protoy
{
char n[100];
int price;
int ages;
}toy[1000];
int max_price=0;
int max_number;//номер игрушки с найбольшей ценой
int i=0;//число записаных игрушек
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL,"Russian");
FILE *f;
char c;
if((f=fopen("F.txt","rt"))==NULL)
printf("FILE NOT OPEN!\n");
readfromfile(f);
printf("Вас приветствует магазин \"Фантастик\".\nСдесь вы можете найти товар по таким критериям:\n\n");
printf("\t1) названия игрушек, цена которых не превышает 4 руб. и которые подходят детям 5 лет\n");
printf("\t2) названия наиболее дорогих игрушек (цена которых отличается от цены cамой дорогой игрушки не более чем на 1 руб.)\n");
printf("\t3) названия игрушек, которые подходят детям как 4, так и 10 лет.\n");
printf("Введите цифру:\n>>");
scanf("%c",&c);
fflush (stdin);//очистить лишнее (если ввели два символа, то второй останется, и когда считать что-то опять, то первым делом он!!! будет считан, а мы уберем лишнее на всякий пожарный.
printtoy(c);
return 0;
}
void readfromfile(FILE *f)
{
while(!feof(f))
{
fscanf(f,"%*c%[^\"]%*c",&toy[i].n);//игнор первой лапки, считать все до лапки, игнор лапки
fscanf(f,"%d",&toy[i].price);
if(toy[i].price>max_price) {max_price= toy[i].price; max_number=i;} //исчем заодно максимальную цена для второго пункта в задаче
fscanf(f,"%d",&toy[i].ages);
fscanf(f,"%*[^\n]%*c");//игнорировать все остальное в даной строке аж до ентер, и потом затереть символ ентера %*c
i++;
}
}
void printtoy(char c)
{
for(int j=0;j<i;j++)
{
if((c=='1' && toy[j].price < 400 && toy[j].ages <= 5) || (c=='2' && max_price - toy[j].price <=99) || (c=='3' && toy[j].ages >=4 && toy[j].ages <=10))
{
printf("%-25s",toy[j].n);//25 значит что зарезервировать 25 клеток под буквы, - значит что слева выводить текст
printf("%5d",toy[j].price);
printf("%5d+\n",toy[j].ages);
}
}
}
Объяснение кода листинга программы
Код считывает информацию из файла F.txt и выводит на экран сведения об игрушках в соответствии с введенным критерием. Список функций и переменных:
- void readfromfile(FILE *f) - считывает информацию из файла
- void printtoy(char c) - выводит на экран информацию об игрушках в соответствии с критерием
- struct protoy toy[1000] - массив структур, содержащих информацию об игрушках
- int max_price=0; - максимальная цена игрушки
- int max_number; - номер игрушки с максимальной ценой
- int i=0; - число записанных игрушек
- int j=0; - цикл печати информации об игрушках Описание действий в коде:
- Считывание информации из файла в массив структур toy[].
- Поиск максимальной цены игрушки и сохранение номера этой игрушки в переменной max_number.
- Ввод критерия поиска с помощью сканера.
- Вывод на экран информации об игрушках в соответствии с введенным критерием.