Дан файл 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 и выводит на экран сведения об игрушках в соответствии с введенным критерием. Список функций и переменных:

  1. void readfromfile(FILE *f) - считывает информацию из файла
  2. void printtoy(char c) - выводит на экран информацию об игрушках в соответствии с критерием
  3. struct protoy toy[1000] - массив структур, содержащих информацию об игрушках
  4. int max_price=0; - максимальная цена игрушки
  5. int max_number; - номер игрушки с максимальной ценой
  6. int i=0; - число записанных игрушек
  7. int j=0; - цикл печати информации об игрушках Описание действий в коде:
  8. Считывание информации из файла в массив структур toy[].
  9. Поиск максимальной цены игрушки и сохранение номера этой игрушки в переменной max_number.
  10. Ввод критерия поиска с помощью сканера.
  11. Вывод на экран информации об игрушках в соответствии с введенным критерием.

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы