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

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

Войти
Регистрация
Восстановить пароль
 
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
#1

Ошибка с дебагом... - C++

02.06.2009, 22:49. Просмотров 469. Ответов 2
Метки нет (Все метки)

есть код программы
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string.h>
 
using namespace std;
void Choice();
int c=0;                            //Глобальная переменная с - для количества элементов структуры  
int k=0;                            //Глобальная переменная к - для номера удаляемого элемента
struct TelAbon                      //Структура для абонента
{
        struct FIO
        {
        char surname[50];           //Фамилия 
        char name[50];              //Имя
        char second_name[50];       //Отчество
        };  
    FIO fio;
    char adress[100];               //Адрес абонента
    int year;                       //Год установки телефона
    int number;                     //Номер телефона
    };
class Telephon                      //Создаю свой класс
{
public:
    Telephon();                     //Конструктор   
    void LoadFile();                //Функция для считывания информации из файла
    void Dobavit();                 //Функция для добавления экземпляра структуры
    void Ydalit();                  //Функция для удаления экземпляра структуры
    void Naity();                   //Функция для поиска по адресу/фамилии  
    void Analiz();                  //Функция печатает количество телефонов,установленных в определенном году
    void SaveFile();                //Функция для записи телефонной книги в файл
    TelAbon mas[5000];              //5000 экземпляров структуры TelAbon 
};
Telephon tel;                       //Экземпляр класса
Telephon::Telephon()                //Инициализация конструктора
{
}
void Telephon::LoadFile()                   
{   
    FILE *f = fopen("telephon.txt", "r");   //Открываем телефонную книгу "telephon.txt"
    if(f==NULL)         
    {
        printf("Cannot open file\n");       //Сообщение, если невозможно открыть файл
        exit(1);
    }
    char buff[150],*p;
    int i=0;
    while(!feof(f))                         //Цикл продолжается, пока не достигнут конец файла
    {
        fgets (buff, sizeof(buff), f);      //Считывание первой строки файла
        if (feof(f))break;                  //Проверка на конец файла
        p = strtok (buff," ");              //Указатель на первую строку в файле до первого знака " "
        strcpy (mas[i].fio.surname, p);     //Копирование первой строки до " " в массив экземпляра структуры
        p = strtok (NULL, " ");             //Указатель на первую строку в файле до второго знака " "
        strcpy (mas[i].fio.name, p);        //Копирование первой строки от " " до " " в массив экземпляра структуры
        p = strtok (NULL, "\n");            //Указатель на первую строку в файле от второго знака " " до конца строки
        strcpy(mas[i].fio.second_name, p);  //Копирование первой строки от " " до конца строки в массив экземпляра структуры
        fgets (buff, 100, f);               //Считывание второй строки файла
        p = strtok (buff, "\n");            //Указатель на вторую строку в файле
        strcpy (mas[i].adress, p);          //Копирование второй строки в массив экземпляра структуры
        fgets(buff, sizeof(buff),f);        //Считывание третьей строки файла
        mas[i].year = atoi(buff);           //Присваивание переменной экземпляра структуры значения из третьей строки файла
        fgets(buff,sizeof(buff),f);         //Считывание четвертой строки файла
        mas[i].number = atoi(buff);         //Присваивание переменной экземпляра структуры значения из четвертой строки файла
        fgets(buff,sizeof(buff),f);         //Считывание пятой (пустой) строки файла
        i++;                                //Инкремент переменной i 
    }
    c=i;                                    //Количество структур в файле           
    fclose(f);                              //Закрываем телефонную книгу
}
 
void Telephon::Dobavit()
{
    cout<<"Enter telephon subscriber surname, name and second name"<<endl;  //ФИО абонента
    _flushall();                            //Очищает буфер перед вводом абонента
    cin.getline(mas[c].fio.surname, sizeof(mas[c].fio.surname), 32);
    cin.getline(mas[c].fio.name, sizeof(mas[c].fio.name), 32);
    cin.getline(mas[c].fio.second_name, sizeof(mas[c].fio.second_name), '\n');
    cout<<"Enter telephon subscriber adress:"<<endl;                        //Адрес абонента
    cin.getline(mas[c].adress, sizeof(mas[c].adress), '\n');
    cout<<"Enter year of telephon installation"<<endl;                      //Год установки телефона
    cin>>mas[c].year;
    cout<<"Enter telephon number:"<<endl;                                   //Номер телефона
    cin>>mas[c].number;
    c++;                                    //Добавление 1 экземпляра структуры
}
void Telephon::Ydalit()
{
    char sname[50], nm[50], snm[50], adr[50], ctrl[1];
    bool Yd = false;                        //Флажок для поиска и удаления абонента
    _flushall();
    cout<<"Enter telephon subscriber surname, name and second name, who you want to remove"<<endl;
    cin.getline(sname, sizeof(sname), 32);
    cin.getline(nm, sizeof(nm), 32);
    cin.getline(snm, sizeof(snm));
    cout<<"Enter telephon subscriber adress"<<endl;
    cin.getline(adr, sizeof(adr));
    for(int i=0; i<c; i++)
    {
        char s = strcmp (sname, mas[i].fio.surname);
        char n = strcmp (nm, mas[i].fio.name);
        char sn = strcmp (snm, mas[i].fio.second_name);
        char ad = strcmp(adr, mas[i].adress);
        if (s==0 && n==0 && sn==0 && ad==0)
        {
            k=i;
            Yd = true;
            cout<<"Telephon subscriber is removed"<<endl;
        }
        else
        if(s==0 && n==0 && sn==0 && ad!=0)
        {
            cout<<"Adress enter don't right"<<endl;
            cout<<"Do you want to remove dubscriber for surname?Y or N"<<endl;
            gets(ctrl);
            if(ctrl[0]==(char)121 || ctrl[0]==(char)89)
            {
                k=i;
                Yd = true;
                cout<<"Telephon subscriber is removed"<<endl;
            }
        }
    }
    if(Yd==true)
    {
        --c;
        for(int j=k; j<c; j++)
            mas[j]=mas[j+1];
    }
    else
        cout<<"There is no such telephon subscriber"<<endl;
}
void Telephon::Naity()
{
    char surname[50];
    bool find=false;                    //Флажок для поиска абонента
    char adress[50];
    char sr[50]={0};
    _flushall();
    cout<<"Enter telephon subscriber surname"<<endl;
    cin.getline(surname,50,'\n');
    cout<<"Enter telephon subscriber adress or press to enter"<<endl;
    cin.getline(adress,50);
    if(strcmp(adress, sr)==0)
        for(int i=0; i<c; i++)
        {
            char s = strcmp(surname, mas[i].fio.surname);
                if(s==0)
                {
                    printf("%s %s %s\n", mas[i].fio.surname, mas[i].fio.name, mas[i].fio.second_name);
                    printf("%s\n", mas[i].adress);
                    printf("%d\n", mas[i].number);
                    printf("\n");
                    find=true;
                }
        }
    else
        for(int i=0; i<c; i++)
        {
            char a = strcmp(adress, mas[i].adress);
            char b = strcmp(surname, mas[i].fio.surname);
            if(a==0 && b==0)
            {   
                printf("\n");
                printf("%s %s %s\n", mas[i].fio.surname, mas[i].fio.name, mas[i].fio.second_name);
                printf("%s\n", mas[i].adress);
                printf("%d\n", mas[i].number);
                printf("\n");
                find=true;
            }
            else
            if(a!=0 && b==0)
            {
                cout<<"Adress enter don't right, subscriber(s) for surname:"<<endl;
                printf("\n");
                printf("%s %s %s\n", mas[i].fio.surname, mas[i].fio.name, mas[i].fio.second_name);
                printf("%s\n", mas[i].adress);
                printf("%d\n", mas[i].number);
                printf("\n");
                find=true;
            }
        }
    if(find==false)
        cout<<" Telephon subscriber isn't find"<<endl;
}
void Telephon::Analiz()
{ 
    int year,count=0;
    cout<<"Enter year of telephon installation"<<endl;              //Вводится год установки телефона
    cin>>year;
    for(int i=0;i<c;i++)                                            //Выполняется, пока не достигнет конца файла
    {   
        if(year==mas[i].year)                                       //Если найден искомый год - инкремент переменной с
            count++;
    }
    cout<<count<<" Telephon installed in "<<year<<" year"<<endl;    //Вывод на экран количество телефонов, установленных в нужном году  
}
int main()
{
    tel.LoadFile();
    Choice(); 
    tel.SaveFile();
    return 0;
}
void Choice()
{
    int control;                            //Переменная для реакции на клавиатуру
    cout<<"Choose menu position"<<endl;     //Выбрать позицию из меню
    cout<<"\nMENU:\n1. Add telephone subscriber \n2. Find telephone subscriber \n3. Remove telephone subscriber \n4. Analysis \n5. Exit\n"<<endl;
    cin>>control;
    for(;;)
    {
        if(control==1)
            tel.Dobavit();
        else
        if(control==2)
            tel.Naity();
        else
        if(control==3)
            tel.Ydalit();
        if(control==4)
            tel.Analiz();
        if (control==5)break;
        else
        if(control==0 || control>5)
            cout<<"You press incorrect button. Please repeat"<<endl;    //Нажата неверная клавиша, повторить
        cout<<"Choose menu position"<<endl;
        cin>>control;
    }
}
void Telephon::SaveFile()
{
    FILE *f;                        
    f = fopen("telephon.txt", "w");         //Открытие телефонной книги
    for(int i=0; i<c; i++)                  //Цикл для записи абонентов в телефонную книгу
    {
        fprintf(f,"%s %s %s\n",mas[i].fio.surname,mas[i].fio.name,mas[i].fio.second_name);
        fprintf(f,"%s\n",mas[i].adress);
        fprintf(f,"%d\n",mas[i].year);
        fprintf(f,"%d\n",mas[i].number);
        if(i<c-1) fprintf(f,"\n");
    }
    fclose(f);                              //Закрытие телефонной книги
}
и исходный файл:
http://www.rapidshare.ru/1062090
Когда при запуске программы я выбираю 3 пункт - удалить абонента(функция Ydalit), пишу фамилию, имя и отчество из файла и пропускаю адрес, выходит сообщение "Удалить абонета?Y or N". Когда я нажимаю заглавную или строчную Y, выводит что абонент удален и вылезает вот такая ошибка:
http://s51.***********/i134/0906/0a/9d8ce8a651f8.jpg
Отчего это может быть?Если делать не через массив,а через int и вводеть вместо Y и N 1 и 0, то программа работает без сбоев
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2009, 22:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка с дебагом... (C++):

Code::Blocks мульки с дебагом - C++
Доброго времени суток. Проблема в следующем-поставил Code::Blocks после прочтения пары хороших рецензий, а он не хочет &quot;строить&quot;(&quot;Build&quot;)...

Непонятный феномен с дебагом - Программирование Android
1) эксцепшин поймать невозможно 2) первый брейкпоинт не срабатывает 3) неправильно обрабатывает условие И главное - раньше всё...

Проблема с дебагом в Visual Interdev 6.0 - C# ASP.NET
Всем привет и с 2003 годом! У меня вот такая проблема возникла. Я сидел и спокойно себе создавал ASP проект в Вин2000 Prof....

Программа для написания на javascript с дебагом - JavaScript
Существует ли такая программа? Пишу на javascript в notepad++, но не знаю, где там находится дебаг (а может его и вообще нет). Иногда очень...

Как найти расположение проектов VS2010 и открыть папку с конкретным дебагом? - C#
Уважаемые программисты, ситуация такая: необходимо нажатием кнопки открыть папку дебаг одного из проектов. Как можно найти директорию...

IIS- asp ошибка: HTTP 500.100 - Внутренняя ошибка сервера - ошибка ASP Internet Information Services - C# ASP.NET
Привет! Конфигурация win2000pro sp2, стандартный IIS, IE 5. При попытке обратиться к сценарию(asp) получаю ошибку: &lt;пропуск&gt; ......

2
Evg
Эксперт CАвтор FAQ
18030 / 6262 / 427
Регистрация: 30.03.2009
Сообщений: 17,205
Записей в блоге: 27
02.06.2009, 23:00 #2
Для ctrl слишком короткий буффер. Даже если туда ввести 1 букву, то нужен по крайней мере ещё один элемент для хранения завершающего нуля

Добавлено через 54 секунды
А ещё лучше не щемись и сделай буффер размером 50, а то пользователь введёт "yes" или что-то типа того
1
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
02.06.2009, 23:36  [ТС] #3
хорошо)))спасибо)))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2009, 23:36
Привет! Вот еще темы с ответами:

1C 8.x Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове метода контекста (ПрочитатьИзменения): Ошибка записи! - 1С
Доброго всем времени суток! подскажи пожалуйста как исправить ошибку: Ошибка при чтении изменений при обмене РИБ: Ошибка при вызове...

Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error). - Turbo Pascal
Здравствуйте, возникла проблема такого плана. Нужно произвести добавление записи в файл, но после успешного создания и чтения вылазиет...

Ошибка разбора XML/ Ошибка при вызове метода контекста (Прочитать) - 1С
1C 8.2 Документооборот КОРП 1.2 Текст ошибки {ОбщийМодуль.АвтозаполнениеШаблоновФайловКлиентСервер.Модуль(616)}: Ошибка при вызове...

Server 2003 Загружается до окна приветствия и вылетает ошибка: isass.exe - Системная ошибка - Windows Server
Ребята, помогите кто может... весь день бьюсь безрезультатно... с утра пришёл на работу а сервак не пингуется... загружается до...


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

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

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