Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
#include <stdio.h>
#include <string.h> //#include <windows.h> //0
int main()
const int l name = 30; //1
struct Man
{
int birth year;
char name[l name + 1];
float pay;
};
const int l dbase = 100;
Man dbase[l dbase];
char name[l name + 1];
FILE *fin;
if ((fin = fopen("dbase.txt", "r"))== NULL)
{
puts("Ошибка открытия файла\n");
return 1;
}
int i = 0;
while(!feof(fin))
{
fgets(dbase[i].name.l name.fin);
fscanf(fin. "%l%f\n".&dbase[i].birth year. &dbase[i].pay); //2
i++;
if (i > 1 dbase)
{
puts("Слишком длинный файл\n");
return 1;
}
}
int n record = i, n man = 0;
float mean pay = 0;
while(true)
{
puts("Введите фамилию или нажмите Enter для окончания:");
gets(name);
if(strlen(name) == 0)break; //3
//OemToChar(name, name); //4
bool not found = true;
for (i = 0; i < n record; i++)
{
if (strstr(dbase[i]. name. name))
if (dbase[i]. name[strlen(name)] == '')
{
strcpy(name. dbase[i]. name);
// CharToOem(name.name); //5
printf("%30s%5i%10.2f\n".name. dbase[i].birth year.
dbase[i].pay); //6
n man++; mean_pay += dbase[i].pay;
not found = false;
}
}
if (not found) puts("Такого сотрудника нет\n");
}
if(n man > 0) printf("Средний оклад: %10.2f\n".mean pay/n man};
return 0;
}
Из всех именованных констант осталась одна, задающая длину поля фамилии (l name, оператор 1). Все остальные константы определять нет смысла, потому что ввод осуществляется не через буферную переменную, а непосредственно в поля структуры с помощью функции чтения строки fgets и форматного ввода fscanf (оператор 2). Эта функция сама выполняет действия по преобразованию подстроки в число, которые мы явным образом задавали в предыдущей программе.
Мы упростили выход из цикла ввода запросов, теперь для завершения цикла достаточно нажать клавишу Enter (оператор 3). Для вывода сведений о сотруднике мы использовали функцию pri ntf (оператор 6).
Дата публикования: 2015-10-09; Прочитано: 255 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!