|
|
|
Помоги по VC++(Please).
|
|||
|---|---|---|---|
|
#18+
мне нужно добавить сортировку по фамилии(по алфавиту) и исправить баг в функции void clear. вот текст программы #include <stdio.h> #include <conio.h> #include <string.h> struct man { char FIO[50]; char namber[10]; char FAK[10]; char GROOP[10]; }; man *D; int n=0,sz=10; void extend() { if (n!=sz) return; sz=sz*2; man *q=new man[sz]; for(int i=0;i<sz/2;i++) q =D; delete D; D=q; } void add() { extend(); char c[100]; printf("\n Enter F.I.O.: "); scanf("%s",D[n].FIO); gets(c); printf(" Enter number of the test book: "); scanf("%s",D[n].namber); gets(c); printf(" Enter the name of faculty: "); scanf("%s",D[n].FAK); gets(c); printf(" Enter the name of group: "); scanf("%s",D[n].GROOP); gets(c); n++; } int get_num() { int m; do { printf("\nEnter number of a line "); scanf("%d",&m); } while (m<1 || m>n); return m-1; printf("\n"); } void show() { printf("\nN\tF.I.O.\t\t\tN test book\tFaculty\t\tGroup\n"); printf("------------------------------------------------------------\n"); for(int i=0;i<n;i++) { printf("%-3d %-20s",i+1,D.FIO); printf("\t%s",D.namber); printf("\t\t%s",D.FAK); printf("\t\t%s",D.GROOP); printf("\n"); if((i+1)%20==0) getch(); } printf("\n"); } void save(char f[]) { printf("\n"); FILE *fd=fopen(f,"w"); fprintf(fd,"%d\n",n); for (int i=0;i<n;i++) { fprintf(fd,"%s\n",D.FIO); fprintf(fd,"%s\n",D.namber); fprintf(fd,"%s\n",D.FAK); fprintf(fd,"%s\n",D.GROOP); } fclose(fd); } void load(char f[]) { printf("\n"); FILE *fd=fopen(f,"r"); if (fd==NULL) return; int m; fscanf(fd,"%d",&m); for (;m!=0;m--,n++) { extend(); fscanf(fd,"%s",D[n].FIO); fscanf(fd,"%s\n",D[n].namber); fscanf(fd,"%s\n",D[n].FAK); fscanf(fd,"%s\n",D[n].GROOP); } fclose(fd); } /* void clear(man *p, int n) { int i; for(i=0;i<n;p++,i++) { p->FIO[0]='\0'; p->namber[0]='\0'; p->FAK[0]='\0'; p->GROOP[0]='\0'; } } */ void main() { int k,i; D=new man[sz]; while(1) { printf("ESC-exit 1-add 2-show 3-save 4-load 5-delete line 6-sort"); printf("\n\nwhat to do: "); switch(getch()) { case '1': printf("\n");add(); break; case '2': printf("\n");show(); break; case '3': printf("\n");save("labs.txt"); break; case '4': printf("\n");load("labs.txt"); break; case '5': printf("\n"); if (n==0) break; k=get_num(); for(i=k;i<n-1;i++) D=D[i+1]; n--; break; // case 'c': clear(D,50);break; case 27: printf("\n\n\n\n\t\t");return; } printf("\n"); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2005, 21:51 |
|
||
|
Помоги по VC++(Please).
|
|||
|---|---|---|---|
|
#18+
baleGosмне нужно добавить сортировку по фамилии(по алфавиту) и исправить баг в функции void clear. вот текст программы #include <stdio.h> #include <conio.h> #include <string.h> struct man { char FIO[50]; char namber[10]; char FAK[10]; char GROOP[10]; }; man *D; int n=0,sz=10; ... void clear(man *p, int n) { int i; for(i=0;i<n;p++,i++) { p->FIO[0]='\0'; p->namber[0]='\0'; p->FAK[0]='\0'; p->GROOP[0]='\0'; } } ... Багов в функции clear() несколько: 1. В индексах необходимо использовать переменную цикла, а не 0, так как сейчас ты делаешь бесполезную работу по переписыванию первого элеменнта массива n раз. 2. Необходимо вставить проверку на выход за границы массива, так как размер у FIO объявлен как 50 символов, а у namber, FAK и GROOP - 10 символов. А в С++ подобного рода проверки оставлены на совести программиста. Последствия отсутствия проверок могут быть самыми непредсказуемыми вплоть до зависания системы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 06:56 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=414&tid=2033642]: |
0ms |
get settings: |
13ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
65ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 244ms |
| total: | 416ms |

| 0 / 0 |
