IbragimOFF
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Ребят, помогите дописать задачку, уже вторую неделю парюсь вот условия задачи: Считать из текстового файла данные о жильцах. Записать компьютерщиков и музыкантов в два разных файла, а владельцев Р-100 в третий файл. на данный момент получилось только сделать чтение из файла определенной структуры, отсеять жильцов по первым буквам фамилии, создать 3 файла, и расписать каждого в свой файл. Задачка конечно не очень рационально построена но все же))) вот код: #include <stdio.h> #include <conio.h> struct DOM { int nomer; //номер в списке char nam[20]; //имя char fam[20]; //фамилия char otc[20]; //отчество char hob[20]; //хобби char com[20]; //компьютер }; //Загрузка структуры из файла int load(char *name,struct DOM *g) { int i; FILE *in; in=fopen(name,"r"); //открытие файла if(!in)return 0; //если не удалось, вернуть 0 i=0; while (!feof(in)) //чтение пока не конец файла { if(fscanf(in,"%d %s %s %s %s %s",&g[i].nomer,&g[i].nam,g[i].fam,g[i].otc,g[i].hob,g[i].com))i++; //если прочитаны все элементы структуры, увеличить кол-во прочитанных элементов } fclose(in); //закрыть файл return i; //вернуть кол-во прочитанных элементов } //Запись в файл программистов int save(struct DOM *g,int n) { int i,n1; FILE *out; out=fopen("programmer.txt","w"); //открытие файла if(!out)return 0; //если не удалось, вернуть 0 for(i=0,n1=0;i<n;i++) //цикл по структурам { if(g[i].fam[0]=='Б') //если первая буква Б { fprintf(out,"%d %s %s %s %s %s",g[i].nomer,g[i].nam,g[i].fam,g[i].otc,g[i].hob,g[i].com); //Записать такого жильца в файл n1++; //увеличить кол-во записанных } else if(g[i].fam[0]=='Б') //если первая буква Б { fprintf(out,"%d %s %s %s %s %s",g[i].nomer,g[i].nam,g[i].fam,g[i].otc,g[i].hob,g[i].com); //Записать такого жильца в файл n1++; //увеличить кол-во записанных } } fclose(out); //закрыть файл return n1; //вернуть кол-во записанных элементов } //Запись в файл музыкантов int save2(struct DOM *g,int n) { int i,n2; FILE *out; out=fopen("musician.txt","w"); //открытие файла if(!out)return 0; //если не удалось, вернуть 0 for(i=0,n2=0;i<n;i++) //цикл по структурам { if(g[i].fam[0]=='В') //если первая буква В { fprintf(out,"%d %s %s %s %s %s",g[i].nomer,g[i].nam,g[i].fam,g[i].otc,g[i].hob,g[i].com); //Записать такого жильца в файл n2++; //увеличить кол-во записанных } } fclose(out); //закрыть файл return n2; //вернуть кол-во записанных элементов } //Запись в файл px100 int save3(struct DOM *g,int n) { int i,n3; FILE *out; out=fopen("px100.txt","w"); //открытие файла if(!out)return 0; //если не удалось, вернуть 0 for(i=0,n3=0;i<n;i++) //цикл по структурам { if(g[i].fam[0]=='Г') //если первая буква Г { fprintf(out,"%d %s %s %s %s %s",g[i].nomer,g[i].nam,g[i].fam,g[i].otc,g[i].hob,g[i].com); //Записать такого жильца в файл n3++; //увеличить кол-во записанных } } fclose(out); //закрыть файл return n3; //вернуть кол-во записанных элементов } int main() { struct DOM gruppa[30]; int n,n1,n2,n3; char name[30]; printf("Input file: "); gets(name); //ввод имени файла с группой n=load(name,gruppa); //загрузка группы if(n) //если загружена { n1=save(gruppa,n); //то сохранить только тех жильцов, фамилии которых нач на Б if(n1) printf("Created file programmer.txt"); //если записаны то вывести сообщение n2=save2(gruppa,n); //то сохранить только тех жильцов, фамилии которых нач на В if(n2) printf("Created file musician.txt"); //если записаны то вывести сообщение n3=save3(gruppa,n); //то сохранить только тех жильцов, фамилии которых нач на Г if(n3) printf("Created file px100.txt"); //если записаны то вывести сообщение } getch(); return 0; } а вот текст текстового файла 1 Евгений Бревнов Валерьевич Компьютерщик PX100 2 Антон Вараксин Анатольевич Музыкант Macintosh 3 Александр Григорьев Николаевич Жилец PX100 кто нибудь может помочь подредактировать условия отсеивания, и сделать код более рациональным? |