Тема: Що це register?
Багато помилок
Я жодного разу не знаю, це автор зовсім тупить або помилка незначна.
А взагалі їх вагон- шістдесят сім помилок та девьять попереджень.
Причому усі зовсім різні.
Ось. void delete(void), list(void);
А, ні, усе, поступово повбирав. А ось що таке register?
Зкомпілювалося, але що це? Незрозумію!
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
struct addr {
char name[30];
char street[40];
char city[20];
char state[3];
unsigned long int zip;
} addr_list[MAX];
void init_list(void), enter(void);
void Funcdelete(void), list(void);
void load(void), save(void);
int menu_select(void), find_free(void);
int main(void)
{
char choice;
init_list(); // инициализация массива структур
for(;;) {
choice = menu_select();
switch(choice) {
case 1: enter();
break;
case 2: Funcdelete();
break;
case 3: list();
break;
case 4: save();
break;
case 5: load();
break;
case 6: exit(0);
}
}
return 0;
}
// Инициализация списка.
void init_list(void)
{
register int t;
for(t=0; t<MAX; ++t) addr_list[t].name[0] = '\0';
}
// Получения значения, выбранного в меню.
int menu_select(void)
{
char s[80];
int c;
printf("1. Ввести имя\n");
printf("2. Удалить имя\n");
printf("3. Вывести список\n");
printf("4. Сохранить файл\n");
printf("5. Загрузить файл\n");
printf("6. Выход\n");
do {
printf("\nВведите номер нужного пункта: ");
gets(s);
c = atoi(s);
} while(c<0 || c>6);
return c;
}
// Добавление адреса в список.
void enter(void)
{
int slot;
char s[80];
slot = find_free();
if(slot==-1) {
printf("\nСписок заполнен");
return;
}
printf("Введите имя: ");
gets(addr_list[slot].name);
printf("Введите улицу: ");
gets(addr_list[slot].street);
printf("Введите город: ");
gets(addr_list[slot].city);
printf("Введите штат: ");
gets(addr_list[slot].state);
printf("Введите почтовый индекс: ");
gets(s);
addr_list[slot].zip = strtoul(s, '\0', 10);
}
// Поиск свободной структуры.
int find_free(void)
{
register int t;
for(t=0; addr_list[t].name[0] && t<MAX; ++t) ;
if(t==MAX) return -1; // свободных структур нет
return t;
}
//Удаление адреса.
void Funcdelete(void)
{
register int slot;
char s[80];
printf("Введите № записи: ");
gets(s);
slot = atoi(s);
if(slot>=0 && slot < MAX)
addr_list[slot].name[0] = '\0';
}
// Вывод списка на экран.
void list(void)
{
register int t;
for(t=0; t<MAX; ++t) {
if(addr_list[t].name[0]) {
printf("%s\n", addr_list[t].name);
printf("%s\n", addr_list[t].street);
printf("%s\n", addr_list[t].city);
printf("%s\n", addr_list[t].state);
printf("%lu\n\n", addr_list[t].zip);
}
}
printf("\n\n");
}
// Сохранение списка.
void save(void)
{
FILE *fp;
register int i;
if((fp=fopen("maillist", "wb"))==NULL) {
printf("Ошибка при открытии файла.\n");
return;
}
for(i=0; i<MAX; i++)
if(*addr_list[i].name)
if(fwrite(&addr_list[i],
sizeof(struct addr), 1, fp)!=1)
printf("Ошибка при записи файла.\n");
fclose(fp);
}
// Загрузить файл.
void load(void)
{
FILE *fp;
register int i;
if((fp=fopen("maillist", "rb"))==NULL) {
printf("Ошибка при открытии файла.\n");
return;
}
init_list();
for(i=0; i<MAX; i++)
if(fread(&addr_list[i],
sizeof(struct addr), 1, fp)!=1) {
if(feof(fp)) break;
printf("Ошибка при чтении файла.\n");
}
fclose(fp);
}
//--------------------------------------------------------------------------------