Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2018, 22:45   #1
tarstar
Пользователь
 
Регистрация: 18.11.2017
Сообщений: 18
Смех Работа со структурами в Си

Помогите, пожалуйста!
Задание было, используя структуры, написать телефонный справочник.
Не получается сделать функцию, которая добавляла бы новый контакт в справочник. Первый контакт добавляется нормально, а когда создаешь второй и пытаешься вывести весь список на экран, то программа вылетает.
КОД:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <malloc.h>


struct persons
{
char firstName[20];
char secondName[20];
long unsigned int phoneNumber;
};

struct phoneBook
{
struct persons *contacts;
int amountContacts;
};

struct phoneBook addContact ( struct phoneBook last )
{
struct phoneBook newBook;
if (last.amountContacts == 0)
{
newBook.contacts = malloc(sizeof(struct persons)*(last.amountContacts + 1));
printf("Enter the first name: ");
scanf("%snewBook.contacts[0].firstName\n",&newBook.contacts[0].firstName);
printf("Enter the second name: ");
scanf("%snewBook.contacts[0].seconName\n",&newBook.contacts[0].secondName);
printf("Enter the phone number: ");
scanf("%dnewBook.contacts[0].phoneNumber\n",&newBook.contacts[0].phoneNumber);
newBook.amountContacts = last.amountContacts + 1;
}
else
{
newBook.contacts = malloc(sizeof(struct persons)*(last.amountContacts + 1));
for ( int i = 0; i < last.amountContacts; i++)
{
newBook.contacts[i] = last.contacts[i];
}
printf("Enter the first name: ");
scanf("%snewBook.contacts[last.amountContacts + 1].firstName\n",&newBook.contacts[last.amountContacts + 1].firstName);
printf("Enter the second name: ");
scanf("%snewBook.contacts[last.amountContacts + 1].seconName\n",&newBook.contacts[last.amountContacts + 1].secondName);
printf("Enter the phone number: ");
scanf("%dnewBook.contacts[last.amountContacts + 1].phoneNumber\n",&newBook.contacts[last.amountContacts + 1].phoneNumber);
newBook.amountContacts = last.amountContacts + 1;

}

return newBook;

}
int main (void)
{
int opt = 228;
struct phoneBook pBook;
pBook.amountContacts = 0;
pBook.contacts = malloc(sizeof(struct persons)*(pBook.amountContacts));
while ( opt != 0)
{
printf(" >>Enter 1 to add new contact\n");
printf(" >>Enter 2 to print all contacts\n");
printf(" >");
scanf("%dopt\n",&opt);



if ( opt == 1)
{
pBook = addContact(pBook);
}
if ( opt == 2)
{
for( int i = 0; i < pBook.amountContacts; i++)
printf("%2s%17s%30d\n", pBook.contacts[i].firstName, pBook.contacts[i].secondName, pBook.contacts[i].phoneNumber);
printf("Amount of contacts: %i\n", pBook.amountContacts);

system("pause");
}
}

return 0;
}
tarstar вне форума Ответить с цитированием
Старый 24.03.2018, 23:16   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

При каждом добавлении контакта книга пересоздаётся заново?
Э
Эт
Это
Это ж
Это же
Это же у
Это же уж
Это же ужа
Это же ужас
Это же ужасн
Это же ужасно
Исправлять там нечего, переписывать по новой, только сначала нужно познакомиться со списками
eoln вне форума Ответить с цитированием
Старый 24.03.2018, 23:39   #3
tarstar
Пользователь
 
Регистрация: 18.11.2017
Сообщений: 18
По умолчанию

Почему ужасно?
tarstar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со структурами михаил-михаил C++ Builder 0 25.12.2016 22:04
Работа со структурами!(Си ++) иришка954 Помощь студентам 1 20.01.2014 15:21
Работа со Структурами slashkinks Помощь студентам 1 14.11.2012 03:15
в Си работа со структурами akakii Помощь студентам 3 04.03.2011 05:25
C++ Работа со структурами Ekatharina Помощь студентам 0 18.01.2010 19:25