#include <stdio.h>
#include<conio.h>
#include<string.h>
#define n 5
struct library {char name[20]; char newspap[15]; char magazine[15]; float price; int circula;} l1;
struct library mass[n];
float pricemin[10];
void input (FILE*);
void print (FILE*);
void app (FILE*);
void cena (FILE*);
main()
{
char c;
FILE*nf;
while (1)
{clrscr();
puts("1-*новый файл");
puts("2-просмотр файла*");
puts("3-добавление в файл");
puts("4-самое дешевое издание");
puts("0-выход");
c=getch();
switch(c)
{case '1':input(nf); break;
case '2':print(nf); break;
case '3': app(nf); break;
case '4': cena(nf); break;
case '0': return 0;
defaults: puts("*Неверный режим");
}
}
}
/////////////////////////////
////////////////////////////////////////////////////////
/////////////////////////////////////
void input(FILE*nf)
{ char ch;
nf=fopen("file1.dat","wb");
clrscr();
printf("\n ввод данных библиотеки\n");
do
{printf("\n **название \n");
scanf("%s",l1.name);
printf("\n газета да или нет\n");
scanf("%s",l1.newspap);
printf("\n журнал да или нет\n");
scanf( "%s",l1.magazine);
printf("\n цена\n");
scanf("%f", &l1.price);
printf( " \n колличество выпусков в год\n");
scanf("%d", &l1.circula);
fwrite(&l1, sizeof(l1),1,nf);
printf("\n Закончить? y/n \n");
ch=getch();
}
while(ch !='y');
fclose(nf);
}
////////////////////////////////////////////////////////
////////////////////////////
///////////////////
////////////////
void print (FILE*nf)
{ int i;
clrscr();
nf=fopen("file1.dat","rb");
i=1;
fread(&l1,sizeof(l1),1,nf);
while(!feof(nf))
{printf("\n %d %s %s %s %f %d ",i,l1.name,l1.newspap,l1.magazine,l1.price,l1.circula);
fread(&l1, sizeof(l1),1,nf);
i++;
}
getch();
}
///////////////////////////////////////////////////////////
/////////////////////
/////////////
/////
void app(FILE*nf)
{ char ch;
nf=fopen("file1.dat","ab");
clrscr();
printf("ввод данных библиотеки\n");
do
{printf("\n *название:");
scanf("%s",l1.name);
printf("газета да или нет :");
scanf("%s", l1.newspap);
printf("журнал да или нет :");
scanf("%s", l1.magazine);
printf("цена:");
scanf("%f", l1.price);
printf("колличество выпусков в год:");
scanf("%d", l1.circula);
fwrite(&l1,sizeof(l1),1,nf);
printf("закончить? y/n");
ch=getch();
}
while (ch != 'y');
fclose(nf);
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////
//////////////////////////////////
///////////////////
////////////////
////////////
////////
/////////
//////
///
//
void cena(FILE*nf)
{float i,j, min;
nf=fopen("file1.dat","rb");
clrscr();
puts("самое дешевое издание");
fread(&l1,sizeof(l1),1,nf);
min=pricemin[0];
for(i=1;i<n; i++)
if(min>pricemin)
min=pricemin;
getch();
}
файлы в Си
Код:
Используя функции и режим меню, создать файл из 10 структур, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, вывести на печать информацию о самом дешевом издании.
Структура имеет вид: название издания, газеты или журнала, стоимость одного экземпляра, количество экземпляров в год.
Все работает кроме последнего четвертого пункта (где нужно вывести на экран инфо осамом дешевом издании) подскажите как подправить
Цитата: sopik
Используя функции и режим меню
оу, круто!
Код:
void cena(FILE*nf)
{
[color=red]int i,j;
float min;[/color]
nf=fopen("file1.dat","rb");
clrscr();
puts("самое дешевое издание");
fread(&l1,sizeof(l1),1,nf);
min=pricemin[0];
for(i=1;i<n; i++)
if(min>pricemin)
{
min=pricemin;
[color=red]j = i;[/color]
}
[color=red]//тут печатаешь инфу об jм издании,
//ибо это есть индекс структуры с минимальной ценой[/color]
getch();
}
{
[color=red]int i,j;
float min;[/color]
nf=fopen("file1.dat","rb");
clrscr();
puts("самое дешевое издание");
fread(&l1,sizeof(l1),1,nf);
min=pricemin[0];
for(i=1;i<n; i++)
if(min>pricemin)
{
min=pricemin;
[color=red]j = i;[/color]
}
[color=red]//тут печатаешь инфу об jм издании,
//ибо это есть индекс структуры с минимальной ценой[/color]
getch();
}
учись правильно и грамотно оформлять код, переменные должны носить информативные имена, оставляй комментарии, разделяй пустыми строками логически дифференцированные участки кода. просмотрев твой код, лично я так и не понял, где ты хранишь список структур, почему глобальный массив размером в 5 элементов. и так далее... это не есть хорошо. а вчитываться в твой код, который вывален абы как без форматирования нет желания.
и еще, вот что такое l1 и где ты это объявляешь? где ты заполняешь массив pricemin и вообще на фиг он тебе нужен, если есть массив структур? или нет... у тебя как бэ не понятно...
Код:
#include <stdio.h>
#include<conio.h>
#include<string.h>
struct library {char name[20]; char newspap[15]; char magazine[15]; float price; int circula;} l1, lmin;
void input (FILE*); //создание нового файла
void print (FILE*); //просмотр файла
void app (FILE*); // добавление в файл
void cena (FILE*); // самое дешевое издание
main()
{
char c;
FILE*nf;
while (1)
{clrscr();
puts("1-*новый файл");
puts("2-просмотр файла*");
puts("3-добавление в файл");
puts("4-дешевое издание");
puts("0-выход");
c=getch();
switch(c)
{
case '1':input(nf); break;
case '2':print(nf); break;
case '3': app(nf); break;
case '4': cena(nf); break;
case '0': return 0;
defaults: puts("*неверный режим");
}
}
}
/////////////////////////////
////////////////////////////////////////////////////////
/////////////////////////////////////
void input(FILE*nf)
{
char ch;
nf=fopen("file1.dat","wb");//открытие файла для записи
clrscr();
printf("\n ‚ввод данных библиотеки\n");
do
{printf("\n **название :\n");
scanf("%s",l1.name);
printf("\n газета (да или нет):\n");
scanf("%s",l1.newspap);
printf("\n журнал (да или нет):\n");
scanf( "%s",l1.magazine);
printf("\n цена:\n");
scanf("%f", &l1.price);
printf( " \n колличество выпусков в год:\n");
scanf("%d", &l1.circula);
fwrite(&l1, sizeof(l1),1,nf); //запись в файл одной структуры l1//
printf("\n закончить? y/n \n");
ch=getch();
}
while(ch !='y');
fclose(nf);
}
////////////////////////////////////////////////////////
////////////////////////////
///////////////////
////////////////
void print (FILE*nf)
{
int i;
clrscr();
nf=fopen("file1.dat","rb");//открыте файла для чтения//
i=1;
fread(&l1,sizeof(l1),1,nf);//чтение одной струк-ры
while(!feof(nf))
{
printf("\n %d %s %s %s %3f %d ",i,l1.name,l1.newspap,l1.magazine,l1.price,l1.circula);
fread(&l1, sizeof(l1),1,nf);
i++;
}
fclose(nf);
getch();
}
///////////////////////////////////////////////////////////
/////////////////////
/////////////
/////
void app(FILE*nf)
{
char ch;
nf=fopen("file1.dat","ab");//открыт.файла для добавления//
clrscr();
printf("ввод данных библиотеки\n");
do
{printf("\n **название:");
scanf("%s",l1.name);
printf("газета(да или нет):");
scanf("%s", l1.newspap);
printf("журнал(да или нет):");
scanf("%s", l1.magazine);
printf("цена:");
scanf("%f", l1.price);
printf("колличество выпусков в год:");
scanf("%d", l1.circula);
fwrite(&l1,sizeof(l1),1,nf);
printf("закончить? y/n");
ch=getch();
}
while (ch != 'y');
fclose(nf);
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////
//////////////////////////////////
///////////////////
////////////////
////////////
////////
/////////
//////
///
//
void cena(FILE*nf)
{
int i;
clrscr();
nf=fopen("file1.dat","rb");
if feof(nf)
{
puts("файл пуст");
}
else
{
fread(&l1,sizeof(l1),1,nf);
lmin=l1;
while(!feof(nf))
{
fread(&l1,sizeof(l1),1,nf);
if(lmin.price>l1.price)
lmin=l1;
}
puts( "самое дешевое издание:");
printf("\n %s %s %s %3f %d",lmin.name, lmin.newspap, lmin.magazine,lmin.price, lmin.circula);
}
fclose(nf);
getch();
}
#include<conio.h>
#include<string.h>
struct library {char name[20]; char newspap[15]; char magazine[15]; float price; int circula;} l1, lmin;
void input (FILE*); //создание нового файла
void print (FILE*); //просмотр файла
void app (FILE*); // добавление в файл
void cena (FILE*); // самое дешевое издание
main()
{
char c;
FILE*nf;
while (1)
{clrscr();
puts("1-*новый файл");
puts("2-просмотр файла*");
puts("3-добавление в файл");
puts("4-дешевое издание");
puts("0-выход");
c=getch();
switch(c)
{
case '1':input(nf); break;
case '2':print(nf); break;
case '3': app(nf); break;
case '4': cena(nf); break;
case '0': return 0;
defaults: puts("*неверный режим");
}
}
}
/////////////////////////////
////////////////////////////////////////////////////////
/////////////////////////////////////
void input(FILE*nf)
{
char ch;
nf=fopen("file1.dat","wb");//открытие файла для записи
clrscr();
printf("\n ‚ввод данных библиотеки\n");
do
{printf("\n **название :\n");
scanf("%s",l1.name);
printf("\n газета (да или нет):\n");
scanf("%s",l1.newspap);
printf("\n журнал (да или нет):\n");
scanf( "%s",l1.magazine);
printf("\n цена:\n");
scanf("%f", &l1.price);
printf( " \n колличество выпусков в год:\n");
scanf("%d", &l1.circula);
fwrite(&l1, sizeof(l1),1,nf); //запись в файл одной структуры l1//
printf("\n закончить? y/n \n");
ch=getch();
}
while(ch !='y');
fclose(nf);
}
////////////////////////////////////////////////////////
////////////////////////////
///////////////////
////////////////
void print (FILE*nf)
{
int i;
clrscr();
nf=fopen("file1.dat","rb");//открыте файла для чтения//
i=1;
fread(&l1,sizeof(l1),1,nf);//чтение одной струк-ры
while(!feof(nf))
{
printf("\n %d %s %s %s %3f %d ",i,l1.name,l1.newspap,l1.magazine,l1.price,l1.circula);
fread(&l1, sizeof(l1),1,nf);
i++;
}
fclose(nf);
getch();
}
///////////////////////////////////////////////////////////
/////////////////////
/////////////
/////
void app(FILE*nf)
{
char ch;
nf=fopen("file1.dat","ab");//открыт.файла для добавления//
clrscr();
printf("ввод данных библиотеки\n");
do
{printf("\n **название:");
scanf("%s",l1.name);
printf("газета(да или нет):");
scanf("%s", l1.newspap);
printf("журнал(да или нет):");
scanf("%s", l1.magazine);
printf("цена:");
scanf("%f", l1.price);
printf("колличество выпусков в год:");
scanf("%d", l1.circula);
fwrite(&l1,sizeof(l1),1,nf);
printf("закончить? y/n");
ch=getch();
}
while (ch != 'y');
fclose(nf);
}
//////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////
//////////////////////////////////
///////////////////
////////////////
////////////
////////
/////////
//////
///
//
void cena(FILE*nf)
{
int i;
clrscr();
nf=fopen("file1.dat","rb");
if feof(nf)
{
puts("файл пуст");
}
else
{
fread(&l1,sizeof(l1),1,nf);
lmin=l1;
while(!feof(nf))
{
fread(&l1,sizeof(l1),1,nf);
if(lmin.price>l1.price)
lmin=l1;
}
puts( "самое дешевое издание:");
printf("\n %s %s %s %3f %d",lmin.name, lmin.newspap, lmin.magazine,lmin.price, lmin.circula);
}
fclose(nf);
getch();
}
я недавно начал изучать си, попробовал исправить ваши замечания. Вот в таком виде все работает, но хотел уточнить кое-какие нюансы?
в моменты заполнения библиотеки иногда , после заполнения первой строки названия, вторая и третья могут вылетать одновременно т.е. мне нужно заполнить поле журнал, а меня уже курсор на газете т.е. перескакивает ввод одного параметра и становится на ввод следующего.
и еще хотел спросить как вставить цикл, для журнала и газеты. У меня сейчас после ввода названия идет строка" журнал (да или нет)" и так же с газетой. т.е. если это журнал то чтобы поле газета уже не появлялось, не знаю как организовать два цикла т.к. один уже есть
слушай, парень, я серьезно, [COLOR="Black"]оформь код нормально[/COLOR]! видишь как он оформлен у меня постом выше? сделай так же, с отступами, пробелами, с табуляциями. ни один уважающий себя человек не станет ломать глаза о твой код, в том числе и я!
Так пойдет?