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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сравнивание 3-х чисел http://www.cyberforum.ru/cpp-beginners/thread385706.html
Как сравнить 3 числа в с++,и вывести на экран число которое из них больше,если не сложно объясните
C++ Тайна Страуструпа - std_lib_facilities.h ! Доброго времени суток. Я начал изучать чудесный язык программирования С++ по книге Принципы и практика использования C++ Страуструпа. Начитался ,что автор весьма серьезный и из этой книги можно... http://www.cyberforum.ru/cpp-beginners/thread385699.html
C++ Ошибка в синтаксисе.
Знаю, и так всех уже достали эти матрицы, и мой вопрос может быть очень глупым, но все же. Вот исходник, который я написал: #include <iostream> #include <conio.h> using namespace std; int...
Программа системный контроль за временем выполнения заданий(процессов) C++
Здравствуйте, как написать программу Организовать системный контроль за временем выполнения заданий(процессов) и службу оповещения о времени выполнения заданий, также возможность досрочного...
C++ Создать специфический массив http://www.cyberforum.ru/cpp-beginners/thread385686.html
Помогите пожалуйста зделать . Объявить массив целых чисел и заполнить его случайными значениями. Диапазон значений -50 - 50 Размерность массива 200 и подсчитать количество пар соседних элементов,...
C++ Построить последовательность Дано натуральное число n и действительное квадратную матрицу порядка n. Построить последовательность b1,...,bn нулей и единиц, в которой, bi=1 ,тогда и только тогда, когда элементы i-й строки матрицы... подробнее

Показать сообщение отдельно
FrozenFox
0 / 0 / 0
Регистрация: 08.11.2011
Сообщений: 7

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

17.11.2011, 03:33. Просмотров 617. Ответов 0
Метки (Все метки)

суть проблемы:
запускаем программу,жмем 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 минуты
решил не выпендриваться и бесконечный цикл внутри мейн убрал, лабу сдам, но вопрос остается открытым =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru