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

ошибка в программе(не могу описать в двух словах) - C++

Восстановить пароль Регистрация
 
FrozenFox
0 / 0 / 0
Регистрация: 08.11.2011
Сообщений: 7
17.11.2011, 03:33     ошибка в программе(не могу описать в двух словах) #1
суть проблемы:
запускаем программу,жмем 6, подаем нужные параметры. потом нажимаем 5 и подаем новые параметры. выскакивает ошибка. обратная последовательность приводит к тому же. хотя если за время работы программы использовать только одну функцию - все проходит нормально.
глупость с динамическим выделение памяти там где не надо - попытка избавиться от ошибки.

прошу ответить как можно скорее - утром лабу сдавать, приблизительно через 3 часа. жду ответа, спасибо всем прочитавшим)

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
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <string.h>
#include <stdlib.h>
 
#define N 256
 
int StrLen(char *Str);//нахождение длинны
int StrCmp(char *Str1,char *Str2);//сравнение строк
int StrFindPos(char *Str1,char *Str2);//нахождение номера элемента с которого вторая строка встречается в первой
int StrFindEmaunt(char *Str1,char *Str2);//нахождение количества вхождений второй строки в первую
void StrDel(char *Str1,int BeginDel,int EndDel);//удаление  из строки с BeginDel-ого элемента по EndDel-ый.
void StrIns(char *Str1,char *Str2,int Position);//включение второй строки в первую с Position-ого элемента
void Menu(int i); //попытка справится с ошибкой, которая возникает благодаря тому что старые значения элементов не очщаются ='(
 
 
void main()
{
    int i;
    while(1)
    {
        printf("1.int StrLen(char *Str);\n2.int StrCmp(char *Str1,char *Str2);\n3.int StrFindPos(char *Str1,char *Str2);\n4.int StrFindEmaunt(char *Str1,char *Str2);\n5.void StrDel(char *Str1,int BeginDel,int EndDel);\n6.void StrIns(char *Str1,char *Str2,int Position);\n");
        i=getch();
        i-=48;
        system("cls");
        Menu(i);
        getch();
        system("cls");
    }
 
}
void Menu(int i)
{
    int j,k;
    char *Str1,*Str2;
    Str1=(char*)malloc(N*sizeof(char));
    Str2=(char*)malloc(N*sizeof(char));
    switch(i)
    {
        case 1:
            gets(Str1);
            printf("return: %i",StrLen(Str1));
            break;
        case 2:
            gets(Str1);
            gets(Str2);
            printf("return: %i",StrCmp(Str1,Str2));
            break;
        case 3:
            gets(Str1);
            gets(Str2);
            printf("return: %i",StrFindPos(Str1,Str2));
            break;
        case 4:
            gets(Str1);
            gets(Str2);
            printf("return: %i",StrFindEmaunt(Str1,Str2));
            break;
        case 5:
            gets(Str1);
            scanf("%i%i",&j,&k);
            StrDel(Str1,j,k);
            puts("result string: ");
            puts(Str1);
            break;
        case 6:
            gets(Str1);
            gets(Str2);
            scanf("%i",&j);
            StrIns(Str1,Str2,j);
            puts("result string: ");
            puts(Str1);
            break;
        case -21:
            return;
    }
    free(Str1);
    free(Str2);
}
int StrLen(char *Str)
{
    int i=0;
    while(*Str)
    {
        ++Str;
        ++i;
    }
    return i;
}
int StrCmp(char *Str1,char *Str2)
{
    while(*Str1==*Str2 && *Str1 && *Str2)
    {
        ++Str1;
        ++Str2;
    }
    if(*Str1>*Str2)return 1;
    else if(*Str1<*Str2)return -1;
    else return 0;
}
int StrFindPos(char *Str1,char *Str2)
{
    int i=0,j=0;
    char *dStr2=Str2;
    while(*Str1)
    {
        if(*dStr2==*Str1)
        {
            i=j;
            while(*dStr2==*Str1)
            {
                ++dStr2;
                ++Str1;
            }
            if(*dStr2==0)return i;
            else dStr2=Str2;
        }
        ++j;
        ++Str1;
    }
    return -1;
}
int StrFindEmaunt(char *Str1,char *Str2)
{
    int Emaunt=0,CtrlEmaunt;
    char *dStr2=Str2;
    while(*Str1)
    {
        CtrlEmaunt=Emaunt;
        if(*dStr2==*Str1)
        {
            while(*dStr2==*Str1)
            {
                if(!(*Str1))break;
                ++dStr2;
                ++Str1;
            }
            if(*dStr2==0)++Emaunt;
            dStr2=Str2;
        }
        if(Emaunt==CtrlEmaunt)++Str1;
        else CtrlEmaunt=Emaunt;
    }
    return Emaunt;
}
void StrDel(char *Str1,int BeginDel,int EndDel)
{
    char *BD=&Str1[BeginDel],*ED=&Str1[EndDel+1];
    while(*ED)
    {
        *BD++=*ED++;
    }
    *BD=0;
}
void StrIns(char *Str1,char *Str2,int Position)
{
    char Box[N],*Runner=Box,*RunnerStr1=&Str1[Position];
    while(*RunnerStr1)
        *Runner++=*RunnerStr1++;
    *Runner=0;
    RunnerStr1=&Str1[Position];
    Runner=Str2;
    while(*Runner)
        *RunnerStr1++=*Runner++;
    Runner=Box;
    while(*Runner)
        *RunnerStr1++=*Runner++;
    *RunnerStr1=0;
}
Добавлено через 32 минуты
решил не выпендриваться и бесконечный цикл внутри мейн убрал, лабу сдам, но вопрос остается открытым =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2011, 03:33     ошибка в программе(не могу описать в двух словах)
Посмотрите здесь:

C++ Не могу не как описать не которые строки в программе
C++ [C++] Вывести все глухие согласные буквы (без повторений), которые встретились в двух самых коротких словах
не могу разобраться в программе C++
Ошибка в программе (Описать структуру с именем NOTE) C++
C++ Описать процедуру сравнения двух слов
C++ Описать каждый шаг в программе
Ошибка в программе, не могу найти где C++
Не могу понять где ошибка в программе C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 10:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru