Gennadiusisus Опубликовано 23 апреля, 2011 Жалоба Поделиться Опубликовано 23 апреля, 2011 Программа должна записывать структуру и результаты обработки этой структуры, в файлы. Проблема в том, что в результате последняя запись выводится не один раз.. #include #include #include "iostream" struct DETAL{ int number; float wes; float cost; int data[3]; int status; int volume; };void add(FILE *a);void last(FILE *f);void vivlast(void);void good(FILE *f);void disp(FILE *e);void main (){ setlocale (0, ""); int i,j;struct DETAL detal;FILE *f,*g,*h;printf("для создания нового файла нажмите 1, для использования готового 2\n");scanf("%i",&j);switch(j){ case 1: f=fopen("info.txt","w+");break; case 2: f=fopen("info.txt","a+");break; default: printf("!Ошибка!");};for(;{ printf("для добавления записи нижмите 1\n для поска и вывода последней детали 2\n для поиска и вывода деталей со знаком качества 3\n для вывода всех деталей 4\n для выхода 0\n"); scanf("%i",&i); switch (i) { case 1: add(f);break; case 2: last(f);break; case 3: good(f);break; case 4: disp(f);break; case 0: exit(0);break; default: printf("!!Ошибка!!"); };} getch();}void add(FILE *a){ struct DETAL op; printf ("\nВведите номер\n"); scanf ("%i", &op.number); printf ("Введите вес\n"); scanf ("%f", &op.wes); printf ("Введите цену\n"); scanf ("%f", &op.cost); printf ("Введите дату производства\n"); scanf ("%i %i %i", &op.data[0], &op.data[1], &op.data[2]); printf ("Введите статус\n"); scanf ("%i", &op.status); printf ("Введите объем\n"); scanf ("%i", &op.volume); fwrite(&op, sizeof(struct DETAL), 1, a);}void last(FILE *f){struct DETAL s,detal; int max0=0,max1=0,max2=0; FILE *o; o=fopen("Last.txt","w+"); rewind(f); while(!feof(f)){ fread(&detal, sizeof(struct DETAL), 1, f); if (detal.data[2]>max2) { max2=detal.data[2]; max1=detal.data[1]; max0=detal.data[0]; s=detal; } else if (detal.data[2]==max2) if (detal.data[1]>max1) { max1=detal.data[1]; max0=detal.data[0]; s=detal; } else if (detal.data[1]==max1) if(detal.data[0]>max0) { max0=detal.data[0]; s=detal; } } printf(" \n \n"); printf ("Номер: %i\n", s.number); printf ("Обьем: %i\n", s.volume); printf ("Цена: %f\n", s.cost);fwrite(&s, sizeof(struct DETAL), 1, o);fclose(o);}/*void vivlast(void){ struct DETAL op; FILE *d=fopen("Last.txt","r"); fread(&op,sizeof(struct DETAL), 1, d); printf("Постедняя по дате деталь: \n"); printf ("%i ", op.number); printf ("%f ", op.wes); printf ("%f ", op.cost); printf ("%i %i %i ", op.data[0], op.data[1], op.data[2]); printf("%i ", op.status); printf ("%i ", op.volume); fclose(d);}*/void good(FILE *f){ struct DETAL detal; FILE *u=fopen("Good.txt","w+"); rewind(f); while(!feof(f)) { fread(&detal, sizeof(struct DETAL), 1, f); if(detal.status==1) { fwrite(&detal, sizeof(struct DETAL), 1, u); }} rewind(u); while(!feof(u)){ fread(&detal, sizeof(struct DETAL), 1, u); printf("Детали имеющие знак качества: \n"); printf ("%i ", detal.number); printf("%f ",detal.wes); printf("%f ", detal.cost); printf("%i %i %i ", detal.data[0], detal.data[1], detal.data[2]); printf("%i ", detal.status); printf("%i ", detal.volume); printf("\n\n"); }}void disp(FILE *e){ struct DETAL detal; rewind(e); printf("\n"); while(!feof(e)){fread(&detal, sizeof(struct DETAL), 1, e);printf("Все имеющиеся детали: \n"); printf ("%i ", detal.number); printf("%f ",detal.wes); printf("%f ", detal.cost); printf("%i %i %i ", detal.data[0], detal.data[1], detal.data[2]); printf("%i ", detal.status); printf("%i ", detal.volume); printf("\n"); }} Ссылка на комментарий
payk Опубликовано 23 апреля, 2011 Жалоба Поделиться Опубликовано 23 апреля, 2011 #include "iostream"Так можно записывать ?попробуй #include Ссылка на комментарий
Gennadiusisus Опубликовано 23 апреля, 2011 Автор Жалоба Поделиться Опубликовано 23 апреля, 2011 Мм проблема не в этом( На сколько я знаю между #include и #include "iostream.h" разницы нет... Ссылка на комментарий
TolkienDRR Опубликовано 23 апреля, 2011 Жалоба Поделиться Опубликовано 23 апреля, 2011 Gennadiusisus, многабукаф, выдели где цикл записи в файл? Ссылка на комментарий
Gennadiusisus Опубликовано 23 апреля, 2011 Автор Жалоба Поделиться Опубликовано 23 апреля, 2011 ну есть основной цикл, в котором предоставляется выбор действий:for(;{ printf("для добавления записи нижмите 1\n для поска и вывода последней детали 2\n для поиска и вывода деталей со знаком качества 3\n для вывода всех деталей 4\n для выхода 0\n"); scanf("%i",&i); switch (i) { case 1: add(f);break; case 2: last(f);break; case 3: good(f);break; case 4: disp(f);break; case 0: exit(0);break; default: printf("!!Ошибка!!"); }; }функция записи структуры в файл:void add(FILE *a){ struct DETAL op; printf ("\nВведите номер\n"); scanf ("%i", &op.number); printf ("Введите вес\n"); scanf ("%f", &op.wes); printf ("Введите цену\n"); scanf ("%f", &op.cost); printf ("Введите дату производства\n"); scanf ("%i %i %i", &op.data[0], &op.data[1], &op.data[2]); printf ("Введите статус\n"); scanf ("%i", &op.status); printf ("Введите объем\n"); scanf ("%i", &op.volume); fwrite(&op, sizeof(struct DETAL), 1, a); }лично моё мнение, что вся проблема со чтением из файла.. Ссылка на комментарий
TolkienDRR Опубликовано 23 апреля, 2011 Жалоба Поделиться Опубликовано 23 апреля, 2011 Тьфу, совсем код не смотрел, когда вопрос задал. Насколько помню не совсем верно использовать цикл по while(!feof(e)), юзай сразу while(fread(&detal, sizeof(struct DETAL), 1, e)) Ссылка на комментарий
Gennadiusisus Опубликовано 24 апреля, 2011 Автор Жалоба Поделиться Опубликовано 24 апреля, 2011 Ооо, работает спасибо большое)) Ссылка на комментарий
TolkienDRR Опубликовано 24 апреля, 2011 Жалоба Поделиться Опубликовано 24 апреля, 2011 Gennadiusisus, пожалуйста =) Есть кнопочка для спасибов) Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти