xliker
![](http://forum.ru-board.com/board/avatars/TheJoker.gif)
Newbie | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Доброго всем дня. Пишу программу для работы со структурами, записанными в файлы на С. Проблема в том, что в функции, выводящей меню, через некоторое время работы (в частности, после 2-х подряд вызовов сортировок или вызова просмотра, а затем сортировки) перестает выводить какую-либо информацию printf. Вот немного кода: Код: void main() { int i,eoj=1,size_of_menu=11,num; textcolor(BLACK); textbackground(WHITE); start(size_of_menu); while(eoj) { clrscr(); num=menu(size_of_menu); //вызываю функцию меню, которая ввыводит меню и возвращает номер нужного пункта for(i=0; i<size_of_menu; i++) { if(num==m[i].code) //m - массив пунктов меню с кодом, текстом пункта меню и указателем на соотв. функцию { if(m[i].fnc()==0) eoj=0; else getch(); break; } } } } int menu(int cnt) //функция меню { int num=0,i; flushall(); for(i=0; i<cnt; i++) printf("\n%d. %s",m[i].code,m[i].text); //вот этот и следующий printf ничего не выводит, m[i].code и m[i].text на месте, как говорит дебаггер printf("\nВведите номер: "); while(!scanf("%d",&num)||num>cnt||num<1) { printf("\nВведите верный номер:"); fflush(stdin); } return num; } //функции сортировки и просмотра, которые участвуют в проблеме int f_sort_diameter() { stl *x=new stl, *min=new stl; int i,j,n_min; int N=get_record_count(); int c=1; bool *marks=new bool[N]; for(i=0; i<N; i++) marks[i]=false; if(N==0) {printf("\nФайл пустой!"); return 1;} FILE *f1,*f2; f1=fopen(path,"rb"); f2=fopen("temp","wb"); for(i=0; i<N; i++) { j=0; n_min=0; c=1; while(c) { c=read(min,sizeof(stl),1,f1); if(!marks[j]) break; j++; n_min++; } while(c) { c=c&&read(x,sizeof(stl),1,f1); j++; if(x->diameter<min->diameter&&!marks[j]) { copy_stl(min,x); n_min=j; } } marks[n_min]=true; write(min,sizeof(stl),1,f2); fseek(f1,0,SEEK_SET); } fcloseall(); remove(path); rename("temp",path); f_print(); flushall(); return 1; } int f_sort_name() { stl *x=new stl, *min=new stl; int i,j,n_min; int N=get_record_count(); int c=1; bool *marks=new bool[N]; for(i=0; i<N; i++) marks[i]=false; if(N==0) {printf("\nФайл пустой!"); return 1;} FILE *f1,*f2; f1=fopen(path,"rb"); f2=fopen("temp","wb"); for(i=0; i<N; i++) { j=0; n_min=0; c=1; while(c) { c=read(min,sizeof(stl),1,f1); if(!marks[j]) break; j++; n_min++; } while(c) { c=c&&read(x,sizeof(stl),1,f1); j++; if((strcmp(x->name,min->name))<0&&!marks[j]) { copy_stl(min,x); n_min=j; } } marks[n_min]=true; write(min,sizeof(stl),1,f2); fseek(f1,0,SEEK_SET); } fcloseall(); remove(path); rename("temp",path); f_print(); return 1; } int f_print() { int i=1,c; FILE *f; f=fopen(path,"rb"); if (f->token==0) {printf("\nФайл не был открыт!"); return 1;} stl *x=new stl; flushall(); c=read(x,sizeof(stl),1,f); if(c) { line(); printf("|Ќ §ў -ЁҐ |•®§пЁ- |ѓ®¤ |„Ё ¬Ґва |ЏҐаЁ®¤ |"); //вывод шапки line(); } else { printf("\nФайл пустой!"); return 1; } while(c) { if(i%20==0) getch(); printf("|%9s|%7s|%5d|%8d|%7d|",x->name,x->host,x->year,x->diameter,x->period); c=read(x,sizeof(stl),1,f); line(); i++; } fclose(f); flushall(); return 1; } int read(stl *x, int size, int count, FILE *file) { int c=1; c=c&&fread(&x->name,size,count,file); c=c&&fread(&x->host,size,count,file); c=c&&fread(&x->year,size,count,file); c=c&&fread(&x->diameter,size,count,file); c=c&&fread(&x->period,size,count,file); return c; } int write(stl *x, int size, int count, FILE *file) { int c=1; c=c&&fwrite(&x->name,size,count,file); c=c&&fwrite(&x->host,size,count,file); c=c&&fwrite(&x->year,size,count,file); c=c&&fwrite(&x->diameter,size,count,file); c=c&&fwrite(&x->period,size,count,file); return c; } //path - глобальная переменная-строка с именем текущего файла | Спасибо заранее, если кто поможет. Очень выручите. |