Перевод вводимого числа из char в int - C (СИ)
Формулировка задачи:
Помогите пожалуйста.
Вообщем все работает нормально кроме int main(). выбираю пункт один и вылетает ошибка. Необходимо сделать без перевода вводимого в меню числа из char в int.
#include <stdio.h> #include <stdlib.h> #include <string.h> FILE*base; int poz=0; const int max=100; struct peoples /* Описание струкутуры БД */ { char name [30]; int age; int oklad; }; struct peoples *peoples_data_base[max]; /* Массив структур */ void data_base() /*инициализация структуры*/ { for(int t = 0; t < max; t++) peoples_data_base[t] = (peoples*)malloc(sizeof(struct peoples));//выделяешь память } void add(void) /*Ввод записи в БД*/ { printf("Enter the employee's last name: "); scanf("%s", peoples_data_base[poz]->name); fflush(stdin); printf("Enter the age of the employee: "); scanf("%d", &peoples_data_base[poz]->age); fflush(stdin); printf("Enter the salary of the employee: "); scanf("%d", &peoples_data_base[poz]->oklad); fflush(stdin); //очищаешь входной поток printf("\n\n"); poz++; } void del(void) /*Удаление записи в БД*/ { int k; printf("Enter the number you want to deleted: \n -> "); scanf("%d", &k); if(k >= 0 && k < poz) free(peoples_data_base[k]); for (int i=k;i<poz-1;i++) peoples_data_base[i]=peoples_data_base[i+1];//смещение базы после удаления, чтобы не было дыр free(peoples_data_base[poz]); poz--; printf("Record deleted successfully! \n\n"); } void list(void) /*Вывод БД*/ { register int i; for(i = 0; i < poz; i++) { if (peoples_data_base[i]->name[0]) { printf("ID %d\n", i+1); printf("Name of staff -> %s\n", peoples_data_base[i]->name); printf("The age of the employee -> %d\n", peoples_data_base[i]->age); printf("Salary of the employee -> %d\n", peoples_data_base[i]->oklad); } } printf("\n\n"); } void save(void) /*Сохранение в файл БД*/ { FILE *base; if((base = fopen("data.txt","w"))==NULL) //проверка на то, есть ли что писать в файл { printf("ERROR!!!\n"); return; } register int i; for(i = 0; i < poz; i++) { fprintf(base, "%s %d %d", peoples_data_base[i]->name, peoples_data_base[i]->age, peoples_data_base[i]->oklad); } printf("\n\n"); fclose(base); } void load(void) /*Загрузка из файла БД */ { FILE *base; poz = 0; if((base = fopen("data.txt","r"))==NULL)//проверка на то есть ли что загружать { printf("Data Base not found!!!\n"); return; } while(!feof(base) && poz < 100) //загружаешь пока файл не кончится и пока записей не станет 100. чтобы не больше { fscanf(base, "%s%d%d", peoples_data_base[poz]->name, &peoples_data_base[poz]->age, &peoples_data_base[poz]->oklad); poz++; } fclose(base); } void sort(void) /* Сортировка */ { struct peoples *sp; int i =0, j = 0; for( i = 0; i < poz; i++ )//пузырьковая сортировка, первый элемент сравнивается последовательно с каждым. затем второй и т.д. { for( j = i+1; j<poz; j++ ) { if(peoples_data_base[i]->oklad>peoples_data_base[j]->oklad) { sp = peoples_data_base[i]; peoples_data_base[i] = peoples_data_base[j]; peoples_data_base[j] = sp; } } } } int main() /*получение значения из меню*/ { char c; { printf("\n"); printf("\n1. Enter the record in the database.\n"); printf("2. Remove the record from the database.\n"); printf("3. Display data from the database.\n"); printf("4. Sort records in a database.\n"); printf("5. Save the data to a file. \n"); printf("6. Load data from a file.\n"); printf("7. !!!Exit!!!\n"); printf("\n You have chosen: "); } while (c = getchar()) { switch(c) { case '1': add(); break; /* Добвление записи */ case '2': del(); break; /* Удаление записи */ case '3': list(); break; /* Вывод БД */ case '4': sort(); break; /* Сортировка */ case '5': save(); break; /* Сохранение БД в файл */ case '6': load(); break; /* Загрузить данные */ case '7': exit(0); break; /* Выход из программы */ break; } } return 0; }
Решение задачи: «Перевод вводимого числа из char в int»
textual
Листинг программы
int main() /*получение значения из меню*/ { char c; [S]{[/S] printf("\n"); printf("\n1. Enter the record in the database.\n"); printf("2. Remove the record from the database.\n"); printf("3. Display data from the database.\n"); printf("4. Sort records in a database.\n"); printf("5. Save the data to a file. \n"); printf("6. Load data from a file.\n"); printf("7. !!!Exit!!!\n"); printf("\n You have chosen: "); [S]}[/S] while (c = getchar()) [S]{[/S] switch(c) { case '1': add(); break; /* Добвление записи */ case '2': del(); break; /* Удаление записи */ case '3': list(); break; /* Вывод БД */ case '4': sort(); break; /* Сортировка */ case '5': save(); break; /* Сохранение БД в файл */ case '6': load(); break; /* Загрузить данные */ case '7': exit(0); break; /* Выход из программы */ break; } [S]}[/S] return 0; }
Объяснение кода листинга программы
- Переменная
c
типа char используется для получения ввода пользователя. - Ввод пользователем числа от 1 до 7.
- В зависимости от ввода пользователя выполняется соответствующая функция:
add()
- добавление записи в базу данных.del()
- удаление записи из базы данных.list()
- вывод содержимого базы данных.sort()
- сортировка записей в базе данных.save()
- сохранение базы данных в файл.load()
- загрузка данных из файла в базу данных.exit(0)
- выход из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д