Найти наибольшее значение в файле

Задачи состоит в том,что есть файл содержащий базу данных ,которая содержит информацию о вкладчиках:номер счета,ФИО,категория счета(срочный или долгосрочный),сумма вклада и дата операции.Нужно при вводе ФИО выводить наибольшую сумму вклада в категории"срочный"ю.

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

struct inf

{

char account_number [7];

char passport_dannye [30];

char deposit_category[20];
int deposit_sum[i]; 
char date[9];

};
int i;
void sozd_add(char *);

void show(char *);

void search(char *);

main()

{

char file_name[25];

int ans;

setlocale (LC_ALL, "Rus");

puts("\n Vvedi name fila: \n");

gets(file_name);

while (1)

{

system ("cLs");

puts(" \n MENU");

puts(" \n 1.Sozd or Add");

puts(" \n 2.Show is fila");

puts(" \n 3.Search for a Deposit");

puts(" \n 4.Exit");

puts(" \n Vvedite punkt menu ans= \n");

scanf("%d",&ans);

switch (ans)

{

case 1 : sozd_add (file_name);break;

case 2 : show (file_name);break;

case 3: search (file_name);break;

case 4 : system ("cLs");

printf("\n\n rabota programmy end\n\n\n");

system ("pause");

return 0;

default :

{

system ("cLs");

printf("\n\n net takogo punkta v menu\n\n\n");

system ("pause");

return (2);

}

}

}

}

struct inf vklada(void)

{

struct inf st;

printf(" vvedite nomer scheta\n ");

scanf("%30s",st.account_number);

printf("\n vvedite vvedite FIO \n ");

scanf("%10s",st.passport_dannye);

printf("\n vvedite kategoriyu vklada(srochniy or dolgosrochniy) : \n ");

scanf("%10s",st.deposit_category);

printf("\n vvedite summu: \n ");

scanf("%d",&st.deposit_sum);

printf("\n datu: \n ");
scanf("%s", st.date);
return st;

}

void sozd_add (char *file)

{

FILE *f;

inf st;

int i=1,n;

system ("cLs");

if((f=fopen(file,"ab"))==NULL)

{

perror("\n Ошибка открытия файла");

puts("\n Нажмите любую клавишу, чтобы вернуться в меню...\n");

system("pause");

return;

}

printf("\n Vvedite kol-vo  \n");

scanf("%d",&n);

for(i;i<=n;i++)

{

st=vklada();

fwrite(&st, sizeof(inf),1,f);

}

printf(" \n Ввод закончен \n\n");

system ("pause");

fclose(f);

}

void out (struct inf st)

{

printf("\n   %6s %10s %27s %15d  %15s\n", st.account_number,st.passport_dannye,st.deposit_category,st.deposit_sum,st.date);

}

void show(char *file)

{

FILE *f;

inf st;

system ("cLs");

if((f=fopen(file,"rb"))==NULL)

{

perror("\n Ошибка открытия файла");

puts("\n Нажмите любую клавишу, чтобы вернуться в меню...\n");

system("pause");

return;

}

printf(" nomer scheta   passportnye dannye   categorya vklada   summa vklada   data \n");

while (fread(&st, sizeof(inf),1,f))

out ( st);

system ("pause");

fclose(f);

}

void search(char * file)

{

FILE *f;
inf st;
char fio[50],v[9]="srochniy" ;
bool f1=true;
system ("cLs");
f=fopen(file, "rb");
puts("\n Vvedite FIO\n");
fflush (stdin);
gets(fio);
while (fread(&st,sizeof(inf),1,f))
if (!strcmp(fio,st.passport_dannye)&&!strcmp(v,st.deposit_category))

{
f1=false;
out (st);
}
if (f1)
{
printf("\n no such depositor\n");
}
system ("pause");
fclose(f);
}

у меня получилось сообразить только как выводить все платежи в категории "срочный",а вот как найти наибольший платеж - ума не приложу.

void search(char * file)

{

FILE *f;
inf st;
char fio[50],v[9]="srochniy" ;
bool f1=true;
system ("cLs");
f=fopen(file, "rb");
puts("\n Vvedite FIO\n");
fflush (stdin);
gets(fio);
while (fread(&st,sizeof(inf),1,f))
if (!strcmp(fio,st.passport_dannye)&&!strcmp(v,st.deposit_category))

{
f1=false;
out (st);
}
if (f1)
{
printf("\n no such depositor\n");
}
system ("pause");
fclose(f);
}

Ответы (1 шт):

Автор решения: DSuhoi

Вклады в банке записываются в массив (вместо int deposit_sum[i]; лучше записать int deposit_sum[LEN];, где LEN - константа). С помощью подобной функции можно найти наибольший элемент этого массива:

int maxElem(int *arr, size_t len){
    int max = arr[0];
    for(size_t i = 0; i < len; i++)
        if(max<arr[i]) max = arr[i];
    return max;
}
→ Ссылка