Дан файл 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.
- Ввод критерия поиска с помощью сканера.
- Вывод на экран информации об игрушках в соответствии с введенным критерием.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д