Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

файлы в Си

52K
26 апреля 2010 года
sopik
23 / / 26.04.2010
Код:
#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 структур, просмотреть файл, добавить в файл новую информацию и, применяя режим прямого доступа, вывести на печать информацию о самом дешевом издании.
Структура имеет вид: название издания, газеты или журнала, стоимость одного экземпляра, количество экземпляров в год.
Все работает кроме последнего четвертого пункта (где нужно вывести на экран инфо осамом дешевом издании) подскажите как подправить
307
26 апреля 2010 года
Artem_3A
863 / / 11.04.2008
Цитата: 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();
}


учись правильно и грамотно оформлять код, переменные должны носить информативные имена, оставляй комментарии, разделяй пустыми строками логически дифференцированные участки кода. просмотрев твой код, лично я так и не понял, где ты хранишь список структур, почему глобальный массив размером в 5 элементов. и так далее... это не есть хорошо. а вчитываться в твой код, который вывален абы как без форматирования нет желания.

и еще, вот что такое l1 и где ты это объявляешь? где ты заполняешь массив pricemin и вообще на фиг он тебе нужен, если есть массив структур? или нет... у тебя как бэ не понятно...
52K
27 апреля 2010 года
sopik
23 / / 26.04.2010
Код:
#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();
}

я недавно начал изучать си, попробовал исправить ваши замечания. Вот в таком виде все работает, но хотел уточнить кое-какие нюансы?
в моменты заполнения библиотеки иногда , после заполнения первой строки названия, вторая и третья могут вылетать одновременно т.е. мне нужно заполнить поле журнал, а меня уже курсор на газете т.е. перескакивает ввод одного параметра и становится на ввод следующего.
и еще хотел спросить как вставить цикл, для журнала и газеты. У меня сейчас после ввода названия идет строка" журнал (да или нет)" и так же с газетой. т.е. если это журнал то чтобы поле газета уже не появлялось, не знаю как организовать два цикла т.к. один уже есть
307
27 апреля 2010 года
Artem_3A
863 / / 11.04.2008
слушай, парень, я серьезно, [COLOR="Black"]оформь код нормально[/COLOR]! видишь как он оформлен у меня постом выше? сделай так же, с отступами, пробелами, с табуляциями. ни один уважающий себя человек не станет ломать глаза о твой код, в том числе и я!
52K
27 апреля 2010 года
sopik
23 / / 26.04.2010
я ж говорю я недавно начал изучать язык, а про оформление я как то даже если честно и не представляю как правильно оформить то надо? Основное отделил, пояснения подписал кое-где.
Так пойдет?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог