powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помоги по VC++(Please).
2 сообщений из 2, страница 1 из 1
Помоги по VC++(Please).
    #32950214
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 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");
}
}
...
Рейтинг: 0 / 0
Помоги по VC++(Please).
    #32950356
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 символов. А в С++ подобного рода проверки оставлены на совести программиста. Последствия отсутствия проверок могут быть самыми непредсказуемыми вплоть до зависания системы...
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помоги по VC++(Please).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]