Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gurricup
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 36
#1

Компилируется, но прекращается работа программы - C++

17.10.2016, 00:53. Просмотров 265. Ответов 6
Метки нет (Все метки)

Вообщем прога компилируется без ошибок, но когда я пытаюсь выполнить задание на добавление элемента в таблицу, после ввода ФИО пациента прога прекращает свою работу, но ОЧЕНЬ РЕДКО бывает что процесс может пойти дальше и прога дропнется только в конце выполнения задания.
так же приложу 2 txt файла name.txt Учет больных.txt
main.cpp
C++
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
89
90
91
92
93
94
95
96
97
98
99
100
101
#include"set.h"
int main()
{
    setlocale(LC_ALL, "rus");
    int n, i;
    visit *v;
    ifstream num;
    num.open("n.txt");
    num >> n;
    num.close();
    ifstream File;
    File.open("name.txt");
    if (!File.is_open())
    {
        cout << "Файл данных не найден!" << endl;
        system("pause");
        return 0;
    }
    v = new visit[n];
    for (i = 0; i < n; i++)
    {
        v[i].read_visit(File);
    }
    File.close();
    int z = 1;
    while (z != 0)
    {
        system("cls");
        v[i].printf_visit(v, n);
        cout << "хотите добавить нового пациента ?: ";
        string yes;
        cin >> yes;
        if (yes == "yes")
        {
            system("cls");
            delete[] v;
            n++;
            ofstream File("name.txt", ios::app);
            v[i].s_klaviaturi(File);
            File.close();
            visit *vis = new visit[n];
            v = vis;
            ifstream f;
            f.open("name.txt");
            f.get(); f.get();
            for (i = 0; i < n; i++)
            {
                v[i].read_visit(f);
            }
            f.close();
            system("pause");
        }
        else
        {
            break;
        }
    }
    while (z!=0)
    {
        system("cls");
        v[i].printf_visit(v, n);
        cout << "Введите номер задания(1 или 2): ";
        cin >> z;
        switch (z)
        {
        case 1:
            system("cls");
            s_pozdney_datoi(v, n);
            system("pause");
            break;
        case 2:
            system("cls");
            cout << "Список Врачей:\n" << endl;
            for (i = 0; i < n; i++)
            {
                cout << v[i].get_doctor().F << " " << v[i].get_doctor().I << " " << v[i].get_doctor().O << ";" << endl;
            }
            patient(v, n);
            system("pause");
            break;
        default:
            if (z != 0)
            {
                cout << "Задание с номером " << z << " нет в списке" << endl;
                system("pause");
            }
 
            break;
        }
    }
    ofstream outfile;
    outfile.open("Учет больных.txt");
    v[i].printf_fail(outfile, v, n);
    outfile.close();
    ofstream f;
    f.open("n.txt");
    f<<n;
    f.close();
    delete[] v;
    return 0;
}
set.h
C++
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
#ifndef _SET_H_
#define _SET_H_
 
#include <iostream>
#include <clocale>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
 
class t
{
public:
    int day;
    int month;
    int year;
};
class FIO
{
public:
    string F;
    string I;
    string O;
};
class visit 
{
private:
    int insurance;
    int card;
    FIO doctor;
    string diagnosis;
    string therapy;
    FIO patient;
    t date;
public:
    void read_visit(ifstream &name);
    void printf_visit(visit *, int );
    void printf_fail(ofstream &name,visit *, int);
    void s_klaviaturi(ofstream &name);
    FIO get_doctor();
    FIO get_patient();
    t get_t();
};
void s_pozdney_datoi(visit *v,int);
void patient(visit *v,int);
#endif
fun.cpp
C++
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include"set.h"
FIO visit::get_doctor()
{ 
    return doctor; 
}
FIO visit::get_patient()
{
    return patient;
}
t visit::get_t()
{
    return date;
}
void visit::read_visit(ifstream &name)
{
    getline(name,patient.F);
    getline(name, patient.I);
    getline(name, patient.O);
    name>>insurance;
    name>>card;
    name.get();
    getline(name, doctor.F);
    getline(name, doctor.I);
    getline(name, doctor.O);
    name>>date.day;
    name>>date.month;
    name>>date.year;
    name.get();
    getline(name, diagnosis);
    getline(name, therapy);
}
void visit::printf_visit(visit *v, int n)
{
    int i;
    cout << "  Таблица(1):" << endl;
    cout << "  ______________________________________________________________________________________" << endl;
    cout << " |                    Учет больных в поликлинике по месту жительства                    |" << endl;
    cout << " |______________________________________________________________________________________|" << endl;
    cout << " |N |   ФИО        |Номер     |Номер    |   ФИО        |Дата     |Диагноз    |Назначение|" << endl;
    cout << " |  |пациента      |мед.полюса|мед.карты|  врача       |обращения|           |  лечения |" << endl;
    cout << " |__|______________|__________|_________|______________|_________|___________|__________|" << endl;
    for (i = 0; i < n; i++)
    {
        cout << " |  |" << setw(14) << v[i].patient.F << "|          |         |" << setw(14) << v[i].doctor.F << "|         |           |          |" << endl;
        cout << " |" << setw(2) << i + 1 << "|" << setw(14) << v[i].patient.I << "|" << setw(10) << v[i].insurance << "|" << setw(9) << v[i].card << "|" << setw(14) << v[i].doctor.I << "| " << setw(2) << v[i].date.day << "." << setw(2) << v[i].date.month << "." << setw(2) << v[i].date.year << "|" << setw(11) << v[i].diagnosis << "|" << setw(10) << v[i].therapy << "|" << endl;
        cout << " |  |" << setw(14) << v[i].patient.O << "|          |         |" << setw(14) << v[i].doctor.O << "|         |           |          |" << endl;
        cout<<" |__|______________|__________|_________|______________|_________|___________|__________|"<<endl;
    }
}
void visit::printf_fail(ofstream &name, visit *v, int n)
{
    int i;
    name << "  Таблица(1):" << endl;
    name << "  ______________________________________________________________________________________" << endl;
    name << " |                    Учет больных в поликлинике по месту жительства                    |" << endl;
    name << " |______________________________________________________________________________________|" << endl;
    name << " |N |   ФИО        |Номер     |Номер    |   ФИО        |Дата     |Диагноз    |Назначение|" << endl;
    name << " |  |пациента      |мед.полюса|мед.карты|  врача       |обращения|           |  лечения |" << endl;
    name << " |__|______________|__________|_________|______________|_________|___________|__________|" << endl;
    for (i = 0; i < n; i++)
    {
        name << " |  |" << setw(14) << v[i].patient.F << "|          |         |" << setw(14) << v[i].doctor.F << "|         |           |          |" << endl;
        name << " |" << setw(2) << i + 1 << "|" << setw(14) << v[i].patient.I << "|" << setw(10) << v[i].insurance << "|" << setw(9) << v[i].card << "|" << setw(14) << v[i].doctor.I << "| " << setw(2) << v[i].date.day << "." << setw(2) << v[i].date.month << "." << setw(2) << v[i].date.year << "|" << setw(11) << v[i].diagnosis << "|" << setw(10) << v[i].therapy << "|" << endl;
        name << " |  |" << setw(14) << v[i].patient.O << "|          |         |" << setw(14) << v[i].doctor.O << "|         |           |          |" << endl;
        name << " |__|______________|__________|_________|______________|_________|___________|__________|" << endl;
    }
 
}
void visit::s_klaviaturi(ofstream &name)
{
    cout << "ФИО Пациента (через пробел): ";
    cin >> patient.F;
    cin >> patient.I;
    cin >> patient.O;
    name << patient.F << endl;
    name << patient.I << endl;
    name << patient.O << endl;
    cout << "Номер мед.полиса: ";
    cin >> insurance;
    name << insurance << endl;
    cout << "Номер мед.карты: ";
    cin >> card;
    name << card << endl;
    cout << "ФИО врача (через пробел): ";
    cin >> doctor.F;
    cin >> doctor.I;
    cin >> doctor.O;
    name << doctor.F << endl;
    name << doctor.I << endl;
    name << doctor.O << endl;
    cout << "Дата обращения (В цифрах): " << endl << "День: ";
    cin >> date.day;
    name << date.day << endl;
    cout << "Месяц: ";
    cin >> date.month;
    name << date.month << endl;
    cout << "Год: ";
    cin >> date.year;
    name << date.year << endl;
    cout << "Диагноз: ";
    cin >> diagnosis;
    name << diagnosis << endl;
    cout << "Назначение лечения: ";
    cin >> therapy;
    name << therapy << endl;
}
zadaniya.cpp
C++
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
#include"set.h"
void s_pozdney_datoi(visit *v,int n)
{
    int i;
    int maxy=v[0].get_t().year;
    for (i=0; i<n; i++)
    {
        if (v[i].get_t().year>maxy)
        {
            maxy=v[i].get_t().year;
        }
    }
    int maxm=v[0].get_t().month;    
    for(i=0;i<n;i++)
    {
        if(v[i].get_t().year==maxy)
        { 
            if (v[i].get_t().month>maxm)
            {
                maxm=v[i].get_t().month;
            }
        }   
    }
    int maxd=v[0].get_t().day;
    for(i=0;i<n;i++)
    {
        if((v[i].get_t().year==maxy)&&(v[i].get_t().month==maxm))
        {
            if (v[i].get_t().day>maxd)
            {
                maxd=v[i].get_t().day;
            }
        }   
    }
    cout<<"Пациент(ы) самой поздней датой обращения в поликлинику: "<<endl;
    for(i=0;i<n;i++)
    {
        if(((v[i].get_t().year==maxy)&&(v[i].get_t().month==maxm))&&v[i].get_t().day==maxd)
        {
            cout<<v[i].get_patient().F<<" "<<v[i].get_patient().I<<" "<<v[i].get_patient().O;
            cout<<"( "<<v[i].get_t().day<<"."<<v[i].get_t().month<<"."<<v[i].get_t().year<<")"<<endl;
        }
    }
}
void patient(visit *v,int n)
{
    int i;
    string temp;
    int s=0,j=0;
    cout<<endl<<"Фамилия Доктора :";
    cin>>temp;
    cout<<"Пациенты,которые были приняты данным врачом:"<<endl;
    for(i=0;i<n;i++)
    {
        if(temp==v[i].get_doctor().F)
        {
            cout<<s+1<<") "<<v[i].get_patient().F<<" "<<v[i].get_patient().I<<" "<<v[i].get_patient().O<<endl;
        j=1,s++;
        }
        
    }
    if(j==0)
        {
            cout<<"Врача  "<<temp<<" нет в списке"<<endl;
        }
    if(s!=0)
    {
        cout<<"Общее кол-во принятых пациентов: "<<s<<endl;
    }   
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2016, 00:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Компилируется, но прекращается работа программы (C++):

Работа программы прекращается... Программа не работает. Закрыть программу. - C++
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int main() { ...

Подскажите почему после ввода значений работа программы прекращается? - C++
#include &lt;cstdio&gt; #include &lt;string.h&gt; struct Pribor { char name; struct Gabarity { int dlina; int...

При разбиении программы на *.cpp, *.h - файлы программа не компилируется. - C++
Если собрать всё в zadacha.cpp, то всё хорошо компилируется. Но если разбить на файлы - ошибка компилятора. В чём проблема? ...

Программа компилируется в Borland 6.0 но не компилируется в Visual Studio 2008 - C++
Ета програма компилируетса в борланде 6.0 но не компилируетса в Visualstudio 2008 и в борланде 10-м почему? #include&lt;iostream&gt; ...

Компилируется в С++ bulder 6.0 но не компилируется в VS 2010 express - C++
Здравствуйте. есть небольшая программка которая с успехом компилируется в borland C++ builder 6.0 но не в какую не хочет компилироваться...

В формате .cpp код компилируется, а в .c не компилируется - C++
1).Подскажите почему в формате .cpp код компилируется, а в .c не компилируется 2). Как сделать так, чтобы компилировалось в .c? ...

6
chloroform
6 / 6 / 3
Регистрация: 09.12.2015
Сообщений: 31
17.10.2016, 01:22 #2
надо использовать отладчик.
0
Gurricup
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 36
17.10.2016, 02:11  [ТС] #3
а можно по подробнее?

Добавлено через 42 минуты
Я так думаю, что ошибка где-то в выделении памяти но я не знаю где.
0
chloroform
6 / 6 / 3
Регистрация: 09.12.2015
Сообщений: 31
17.10.2016, 02:13 #4
в большинстве IDE есть отладчик, запускаешь в пошаговом режиме и смотришь что и как. изучи свою IDE.
1
gazlan
3139 / 1915 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
17.10.2016, 03:27 #5
Проверок нет, переменные не инициализируются, файл "n.txt" не существует. И прочий кошмар...
0
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
17.10.2016, 11:25 #6
Как пользоваться отладчиком (в Visual Studio)
0
nd2
2821 / 2391 / 851
Регистрация: 29.01.2016
Сообщений: 8,004
17.10.2016, 11:49 #7
Цитата Сообщение от Gurricup Посмотреть сообщение
C++
1
2
3
4
while (z != 0)
 {
system("cls");
v[i].printf_visit(v, n)
И чему тут i равен? Предположу, что n, при допустимом n - 1.
Цитата Сообщение от Gurricup Посмотреть сообщение
C++
1
2
3
delete[] v;
ofstream File("name.txt", ios::app);
v[i].s_klaviaturi(File);
Память освободили, а потом, через этот же указатель, обращаемся по индексу (чему он тут, кстати, равен?) неизвестно куда.

Добавлено через 5 минут
Т.е, имеют место выходы за границу выделенной памяти - UB.
Цитата Сообщение от Gurricup Посмотреть сообщение
прога прекращает свою работу, но ОЧЕНЬ РЕДКО бывает что процесс может пойти дальше и прога дропнется только в конце выполнения задания.
0
17.10.2016, 11:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2016, 11:49
Привет! Вот еще темы с ответами:

Прекращается запись в файл - C++
Вообщем есть цикл, В цикле идет - Взятие строки из списка - Удаление первой строки из спика - Запись списка в файл. Запись...

Клавиатурный тренажер - не прекращается выполнение цикла - C++
Здравствуйте! Подскажите пожалуйста, вот часть кода main: void main() { srand((unsigned)time(0)); // Код клавиши Esc const...

Не прекращается ввод при вводе пустой строки - C++
Подскажите, пожалуйста, почему у меня не происходит прерывание цикла при вводе пустой строки вместо имени студента: #include...

С ошибкой прекращается работа программы - Windows 7
при запуске игры выдает ошибку так же при закрытии браузеров и не только как решить эту проблему.?


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

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

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