Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
re3ak98
0 / 0 / 0
Регистрация: 15.07.2011
Сообщений: 52
1

Краш программы. Поиск по структуре

13.11.2015, 11:16. Просмотров 859. Ответов 2

Доброго времени суток, уважаемые форумчане!
Я столкнулся с такой проблемой...
Условие задачи :
Кликните здесь для просмотра всего текста
В записной книжке указаны фамилии и номера телефонов
30 человек. Составить программу:
а) которая определяет, есть ли в записной книжке телефон
некоторого человека, и, если есть, печатающую номер
его телефона;
б) которая определяет, есть ли в записной книжке информация
о человеке с заданным номером телефона, и, если есть,
печатающую фамилию этого человека.


Собственно сделал программу, обязательным условием является выбор через switch.
Но не в этом суть. К примеру, я ввожу по 5 переменных в структуру. По фамилии все ищет нормально, а вот при поиске по номеру - крашится.
Так-же проблема состоит в том, что программа, если ввести к примеру 5 фамилию, выбивает 4 раза "Фамилию не найдено", а на 5, собственно - выводит.

Сам код:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 #include <iostream>
#include <conio.h>
#include <string.h>
using namespace std;
 
const int  kst = 5;
 
struct baza
{
char pr[10]; //прізвище
char nom[10]; // Номер
}bd[kst];
 
 
void AddElements()
{
     
     cout<<"Zapolnit' bazu danih (max. elementiv - 5)"<<endl;
     for(int i=0; i<5; i++)
     {
        cout<<"Vvedit' prizvuche: ";
        cin>>bd[i].pr;
        cout<<"Vvedit nomer: ";
        cin>>bd[i].nom;     
     }
     
}
 
void SearchName(char *pr)
{
for(int i=0; i<5;i++)
        {
                if (strcmp(pr, bd[i].pr)==0)
                        {
                        cout<<"Prizvuche: "<<bd[i].pr<<endl;
                        cout<<"Nomer: "<<bd[i].nom<<endl;                   
                        }
                else
                        {
                        cout<<"============================"<<endl;
                        cout<<"Prizvuche ne znaydeno"<<endl;;
                        cout<<"============================";
                        }
        }
        getch();
}
 
void SearchNum(char *nom)
{
     for(int i=0; i<5;i++)
        {
                if (strcmp(nom, bd[i].nom)==0)
                        {
                        cout<<"Nomer: "<<bd[i].nom<<endl;   
                        cout<<"Prizvuche "<<bd[i].pr<<endl;
                        }
                else
                       {
                        cout<<"============================"<<endl;
                        cout<<"Nomer ne znaydeno"<<endl;
                        cout<<"============================";
                        }
        }
        getch();
 
}
 
int main()
{
char *pr[20], *nom[40], choice;
    AddElements();
    cout<<"Viberit' diyu:"<<endl<<"1 - Znaytu dani v bazi po prizvuschu"<<endl<<"2 - Znaytu dani po nomeru telefonu";
    cout<<endl<<"Viberit' diyu: ";
    cin>>choice;
    switch(choice)
    {
        case '1':
            cout<<"Vvedit prizvische: ";
            cin>>*pr;
            SearchName(*pr);
        break;
        case '2':
        cout<<"Vvedit nomer: ";
        cin>>*nom;
        SearchNum(*nom);
        break;     
}
}
Язык выше - украинский, если что-то будет не понятно - спрашивайте)
prizviche = фамилия
vvedit = введите
Znaytu dani v bazi po prizvuschu = найти данные в базе по фамилии
Znaytu dani po nomeru telefonu = найти данные в базе по номеру.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2015, 11:16
Ответы с готовыми решениями:

Краш программы
Хелп! Программа крашится после ввода значения. #include&lt;iostream&gt;...

Краш программы
Из за чего крашит мою программу в 1 запросе я ввожу: C:\test.. во 2...

Краш программы
Добрый день, такой вопрос, почему крашится программа если обращаюсь таким...

Краш программы, ошибка сегментации
Доброго времени суток. У меня возникла проблема с функцией которая должна...

Краш программы после вызова Inverse_element
#include&lt;iostream&gt; #include&lt;math.h&gt; #include &lt;fstream&gt; #include &lt;string&gt;...

2
John Prick
837 / 768 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 3
13.11.2015, 11:29 2
Лучший ответ Сообщение было отмечено re3ak98 как решение

Решение

Цитата Сообщение от re3ak98 Посмотреть сообщение
Так-же проблема состоит в том, что программа, если ввести к примеру 5 фамилию, выбивает 4 раза "Фамилию не найдено", а на 5, собственно - выводит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void SearchName(char *pr)
{
    for(int i=0; i<5;i++)
    {
        if (strcmp(pr, bd[i].pr)==0)
        {
            cout<<"Prizvuche: "<<bd[i].pr<<endl;
            cout<<"Nomer: "<<bd[i].nom<<endl;
            getch();
            return;                   
        }
    }
    getch();
    cout<<"============================"<<endl;
    cout<<"Prizvuche ne znaydeno"<<endl;;
    cout<<"============================";
}
Добавлено через 4 минуты
Крашится из-за того, что ты не выделяешь память, используя указатели. Но они тебе и не нужны.

Вот это вот зачем?
C++
1
char *pr[20], *nom[40]
Используй такие же массивы, что и в структуре:
C++
1
char pr[20], nom[40];
Ну и ниже разыменования убери для этих массивов.
1
re3ak98
0 / 0 / 0
Регистрация: 15.07.2011
Сообщений: 52
13.11.2015, 11:34  [ТС] 3
Отлично!
Но вот проблема с поиском номера
Чувствую, что либо я намудрил в цикле, либо же в main

Добавлено через 1 минуту
Пытался, пишет - undeclared

Добавлено через 18 секунд
Цитата Сообщение от John Prick Посмотреть сообщение
Вот это вот зачем?
C++1
char *pr[20], *nom[40]Используй такие же массивы, что и в структуре:
C++1
char pr[20], nom[40];Ну и ниже разыменования убери для этих массивов.
Все работает! ОГРОМНАЯ БАЛГОДАРНОСТЬ!!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2015, 11:34

Краш программы при работе с tinyxml2
Привет всем. Использую tinyxml2, пытаюсь из этого xml документа: &lt;response...

Краш программы при попытке записи в файл
Такой вот небольшой кусок программы, который должен просто записывать вводимые...

Поиск по структуре
Имеется функция поиска сотрудника по имени: void Searchname(video film, char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru