|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.03.2018, 22:45 | #1 |
Пользователь
Регистрация: 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; } |
24.03.2018, 23:16 | #2 |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
При каждом добавлении контакта книга пересоздаётся заново?
Э Эт Это Это ж Это же Это же у Это же уж Это же ужа Это же ужас Это же ужасн Это же ужасно Исправлять там нечего, переписывать по новой, только сначала нужно познакомиться со списками |
24.03.2018, 23:39 | #3 |
Пользователь
Регистрация: 18.11.2017
Сообщений: 18
|
Почему ужасно?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа со структурами | михаил-михаил | 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 |