Перевод вводимого числа из 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)- выход из программы.