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

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

Войти
Регистрация
Восстановить пароль
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 528
#1

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

24.11.2012, 14:30. Просмотров 296. Ответов 9
Метки нет (Все метки)

Почему игнорируется меню,оно собственно не работает,без него все работет,но не могу понять почему с ним не хочет?

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

.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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2012, 14:30     Меню игнорируется
Посмотрите здесь:

игнорируется gets - C++
В цикле gets выполняется 1 раз и в дальнейшем gets игнорируется for (i = 0; i &lt;= 4; i++) { cout &lt;&lt; endl &lt;&lt; &quot;Vvedite nazvanie...

Игнорируется RegisterHotKey() - C++
Не понять почему, но все же факт. ЗЫ:Компилятор ошибок не выдает! bool noclip(HWND hwnd) { if(RegisterHotKey(NULL, 1,...

В программе игнорируется условие - C++
Искал в интернете схожие задачи/коды, находил подобные, но с другим синтаксисом.Так как я только начинающий, мне очень затруднительно его...

Почему игнорируется цикл? - C++
Всем добрый день! Как я понял, игнорируется цикл. Ответ выдается тот же, что и при вводе x. Буду рад помощи! #include &lt;iostream&gt; ...

первый gets() игнорируется, а второй работает - C++
Здравствуйте! Не могу понять почему первый gets() игнорируется, вернее в него записывается '\n'; #include&lt;iostream&gt; ...

почему игнорируется метод класса - C++
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; class Vect { private: double **p; double **p1; double **p2; int size1; int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Сообщений: 528
24.11.2012, 17:03  [ТС]     Меню игнорируется #3
не в этом проблема,можно continue в каждом написать, проблема не решена
alsav22
5416 / 4812 / 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
Сообщений: 528
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
5416 / 4812 / 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
Сообщений: 528
24.11.2012, 19:38  [ТС]     Меню игнорируется #7
да я похожее что то видел,только там было
C++
1
cin.ignore();
использовано
alsav22
5416 / 4812 / 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
7099 / 5276 / 267
Регистрация: 10.12.2010
Сообщений: 23,262
Записей в блоге: 17
24.11.2012, 20:49     Меню игнорируется #9
Ага или sync() если под виндой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2012, 20:58     Меню игнорируется
Еще ссылки по теме:

Почему игнорируется cin.getline() в классе? - C++
Вот конструктор класса. При вызове конструктора создаётся односвязный список и данные вводятся с клавиатуры. Почему-то не работает функция...

Почему-то игнорируется эта функция, другие работают. Что не так? - C++
void boat::atack() { srand(static_cast &lt;unsigned int&gt;(time(0))); std::cout &lt;&lt; &quot;Нажмите любую клавишу для начала боя!&quot;; _getch();...

написать программу ввода элем. массива с игнорированием числа 5 (пример вводиться а число 5 не игнорируется) - C++
#include &quot;stdafx.h&quot; # include &lt;iostream&gt; # include &lt;clocale&gt; using namespace std; int main () { setlocale (LC_CTYPE,...

Разработать программу, в которой будет организовано меню, выбор функций меню - C++
Разработать программу, в которой будет организовано меню, выбор функций меню должно быть организовано по функциональной клавише. Вся...


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

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

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