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

Меню игнорируется - C++

Восстановить пароль Регистрация
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
24.11.2012, 14:30     Меню игнорируется #1
Почему игнорируется меню,оно собственно не работает,без него все работет,но не могу понять почему с ним не хочет?

Если в майне разкоментировать меню как я хочу сделать,оно игнорирует,тупо даже не дает ввести имя файла,сразу пишет не найден.Почему так?Если закоментировано как щас то все нормально.Просто параллельно еще один код пишу и там похожее ,там все прекрасно работает а тут не хочет

.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
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
#ifndef Classes_H
#define Classes_H
 
class ReadError{};
class WorkError{};
 
template<class Type> class Array
{
private:
    Type* mass; 
    Type* newmass;
    unsigned int size;
public:
    Array();
    ~Array();
    void change();
    void write();
    void filee();
};
 
//--------------------------Конструктор---------------------------//
template<class Type> Array<Type>::Array()
{
    mass = 0;
    newmass = 0;
    size = 0;
}
//----------------------------------------------------------------//
 
//---------------------Работа с файлом----------------------------//
template<class Type> void Array<Type>::filee()
{
    char file_name[50];
    char* file_txt = ".txt";
    ifstream file_potok;
    cout<< "Имя файла вводится без расширения, для выхода введите exit"<<endl<<"Введите имя файла: ";
    cin.getline(file_name, 250);
    if(strcmp(file_name,"exit")==0)
    {
        cout<<endl<<"Выходим.....";
        _getch();
        exit(EXIT_SUCCESS);
    }
    strcat(file_name,file_txt);
    file_potok.open(file_name);
    if(file_potok.fail())
    {
        throw ReadError();
    }
    string line;  
    file_potok>>line;
    size=line.length();   
    mass=new Type[size];
    for(int i=0; i<size; i++)
    {
        mass[i]=line[i];
    }
}
//----------------------------------------------------------------//
 
//----------------------Деструктор--------------------------------//
template<class Type> Array<Type>::~Array()
{
    if(mass)
    {
        delete [] mass;
    }
    if(newmass)
    {
        delete [] newmass;
    }
}
//----------------------------------------------------------------//
 
//-----------------------Замена строки---------------------------//
template<class Type> void Array<Type>::change()
{
    if(size==0)
    {
        throw ReadError();
    }
    newmass=new Type[size+1];
    int pos=-1;
    for(int i=0; i<size; i++)
    {
        if(mass[i]==120)
        { 
            pos=i;
            break;
        }
    }
    if(pos==-1)
    {
        throw WorkError();
    }
    for(int i=0; i<pos; i++)
    {
        newmass[i]=mass[i];
    }
    newmass[pos]=107;   
    newmass[pos+1]=115; 
    for(int i=pos+1; i<size+1; i++)
    {
        newmass[i+1]=mass[i];
    }
}
//-------------------------------------------------------------//
 
//---------------------Вывод на экран--------------------------//
template<class Type> void Array<Type>::write()
{
    cout<<endl<<"Исходная строка: ";
    for(int i=0; i<size; i++)
    {
        cout<<mass[i];
    }
    cout<<endl;
    cout<<"Преобразованная строка: ";
    for(int i=0; i<size+1; i++)
    {
        cout<<newmass[i];
    }
    cout<<endl;//_getch();
}
//-----------------------------------------------------------//
 
#endif
.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
#include"headers.h"
#include"Сlasses.h"
 
int main()
{
    setlocale(LC_ALL,"Russian");
    Array<char> x;
    int ch = 0;
    while(true)
    {
    /*  cout << "Меню" << endl << "1) Считать с файла" << endl << "2) Заменить x на ks" << endl << "3) Вывести на экран" << endl << "4) Выход" << endl << endl << "Ввод: ";
        cin >> ch;*/
        try
        {
            /*switch(ch)
            {
                case 1: x.filee();
                case 2: x.change();
                case 3: x.write();
                case 4: exit(EXIT_SUCCESS);
            }*/
            x.filee();
            x.change();
            x.write();
        }
        catch(ReadError&)
        {
            cout<<endl<<"Файл не найден!!!"<<endl;
            _getch();
            system("cls");
            continue;
        }
        catch(WorkError&)
        {
            cout<<endl<<"В строке нет символа 'x'."<<endl;
            _getch();
            system("cls");
            continue;
        }
        _getch();
        break;
    }
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
24.11.2012, 16:40     Меню игнорируется #2
не совсем понятно зачем здесь используется трай с кетчем раз.
после каждого кейса необходимо использовать брейк иначе все кейсы будут использоваться
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
24.11.2012, 17:03  [ТС]     Меню игнорируется #3
не в этом проблема,можно continue в каждом написать, проблема не решена
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2012, 18:05     Меню игнорируется #4
Вот так сделайте:
C++
1
(cin >> ch).get();
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
24.11.2012, 18:56  [ТС]     Меню игнорируется #5
от души,вообще прям радуют люди которые бьют прям в точку,обьясните в чем фишка?пойду гуглить

Добавлено через 10 минут
блин,еще оказывается присваивание не работает,сделал так

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
template<class Type> Type& Array<Type>::operator = (const Array &tam)
{
    if (&tam == this)
    {
        return *this;
    }
    if (mass)
    {
        delete[] mass;
    }
    if (newmass)
    {
        delete[] newmass;
    }
    size = tam.size;
    if (tam.mass && size > 0)
    {
        mass = new Type [size];
        for(int i=0;i<size;i++)
        {
            mass[i] = tam.mass[i];
        }
    }
    else
    {
        mass = 0;
    }
    if (tam.newmass && size > 0)
    {
        newmass = new Type [size+1];
        for(int i=0;i<size+1;i++)
        {
            newmass[i] = tam.newmass[i];
        }
    }
    else
    {
        newmass = 0;
    }
 
    return *this;
}
в чем косяк?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2012, 18:59     Меню игнорируется #6
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
обьясните в чем фишка?
В потоке ввода, после cin >> ch, остаётся '\n' (попадает туда после нажатия Enter). А в filee() getline() считывает его первым и код идёт дальше. Чтобы этого не было, нужно, после cin >> ch, извлечь '\n' из потока.
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
24.11.2012, 19:38  [ТС]     Меню игнорируется #7
да я похожее что то видел,только там было
C++
1
cin.ignore();
использовано
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2012, 20:31     Меню игнорируется #8
Цитата Сообщение от a.n.o.n.i.m Посмотреть сообщение
блин,еще оказывается присваивание не работает,сделал так
Если так:
Кликните здесь для просмотра всего текста
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
Array& operator=(const Array &tam);
...
template<class Type> Array<Type>& Array<Type>::operator=(const Array &tam)
{
    if (&tam == this)
    {
        return *this;
    }
    if (mass)
    {
        delete[] mass;
    }
    if (newmass)
    {
        delete[] newmass;
    }
    size = tam.size;
    if (tam.mass && size > 0)
    {
        mass = new Type [size];
        for(int i=0;i<size;i++)
        {
            mass[i] = tam.mass[i];
        }
    }
    else
    {
        mass = 0;
    }
    if (tam.newmass && size > 0)
    {
        newmass = new Type [size+1];
        for(int i=0;i<size+1;i++)
        {
            newmass[i] = tam.newmass[i];
        }
    }
    else
    {
        newmass = 0;
    }
 
    return *this;
}
Avazart
 Аватар для Avazart
6896 / 5136 / 251
Регистрация: 10.12.2010
Сообщений: 22,568
Записей в блоге: 17
24.11.2012, 20:49     Меню игнорируется #9
Ага или sync() если под виндой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 20:58     Меню игнорируется
Еще ссылки по теме:

C++ первый gets() игнорируется, а второй работает
Игнорируется RegisterHotKey() C++
Разработать программу, в которой будет организовано меню, выбор функций меню C++

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

Или воспользуйтесь поиском по форуму:
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
24.11.2012, 20:58  [ТС]     Меню игнорируется #10
опять в яблочко,все добил,sync() не видел,еще не применял
Yandex
Объявления
24.11.2012, 20:58     Меню игнорируется
Ответ Создать тему
Опции темы

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