Функция sp в приведенном коде не пашет. Почему - непонятно.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 20
struct car{
char reg_number[20];
char *car_model;
int probeg;
};
car *D; // Указатель на ДМ строк таблицы
int n=0,sz=10; // кол-во строк и размерность ДМ (глобальные)
void extend(){ // проверка на переполнение ДМ и расширение
if (n!=sz) return;
sz=sz*2;
car *q=new car[sz];
for (int i=0;i<sz/2;i++) q=D;
delete D;
D=q;
}
void add(){
extend(); // не переполнен ли ДМ
printf("\nRegistration number:"); scanf("%s",D[n].reg_number);
char c[80];
gets©; // читать оставшийся \n из входного потока
printf("\nModel of car:"); gets©;
D[n].car_model=strdup©; // копия строки в ДМ
printf("\nWay:"); scanf("%d", &D[n].probeg);
n++;
}
int get_num(){
int m;
do {
printf("\nn="); scanf("%d",&m);
} while (m<1 || m>n);
return m-1;
}
void show(){
printf("\n\nN Registration number\t\tWay\tModel\n");
printf("--------------------------------------------------\n");
for (int i=0;i<n;i++){
printf("%-3d %-20s",i+1,D.reg_number);
printf("\t%d\t", D.probeg);
printf("%s\n",D.car_model);
if((i+1)%20==0) getch();
}
}
void save(char f[]){
FILE *fd=fopen(f,"w");
fprintf(fd,"%d\n",n);
for (int i=0;i<n;i++){
fprintf(fd,"%s\n",D.reg_number);
fprintf(fd,"%s",D.car_model);
fprintf(fd,"%d\n\n",D.probeg);
}
fclose(fd);
}
void load(char f[]){
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].reg_number);
char c[80];
fgets(c,80,fd); // читать "хвост" предыд. строки
fgets(c,80,fd);
D[n].car_model=strdup©;
fscanf(fd,"%d",&D[n].probeg);
}
fclose(fd);
}
void edit(int k){
printf("\nEnter new values:\n");
printf("\nRegistration number:"); scanf("%s",D[k].reg_number);
char c[80];
gets©; // читать оставшийся \n из входного потока
printf("\nModel of car:"); gets©;
D[k].car_model=strdup©; // копия строки в ДМ
printf("\nWay:"); scanf("%d", &D[k].probeg);
}
void sp(){
char *s;
int t=0,p=0;
printf("\nEnter model of car: ");
gets(s);
for(int i=0; i<n; i++){
if (strcmp(s, D.car_model)==0) t=t+D.probeg;
p=p+1;
}
t=t/p;
printf("\nSrednii probeg = %d", t);
getch();
}
void main(){
int k,i,t;
D = new car[sz];
while(1){
printf("\n1 - add\n2 - show\n3 - delete\n4 - save\n5 - load\n6 - edit\n7 - Srednii probeg\nwhat to do? ");
switch(getch()){
case '1': add(); break;
case '2': show(); break;
case '3': if (n==0) break;
k=get_num();
for (i=k;i<n-1;i++) D=D[i+1];
n--;
break;
case '4': save("a.txt"); break;
case '5': load("a.txt"); break;
case '6': if (n==0) break;
t=get_num();
edit(t); break;
case '7': sp(); break;
case 27: return;
}
}
}