Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обсуждение работы кода 
V
    Опции темы
shinoby
Дата 22.11.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Помогите разобраться с работой моего кода
Код

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include"rus.h"

int menu_1();
int menu_1_1();

void main(){
    int answer;
    int n;
    bool flag=false; //позволит определить внесены ли данные в матрицы
    SetColor(2,9);
    cout<<Rus("************************************************************************")<<endl;
    cout<<Rus("ВНИМАНИЕ!!! Поскольку многие из операций, предложенных в условии задания,")<<endl;
    cout<<Rus("можно совершить только над квадратными матрицами, то в данном")<<endl;
    cout<<Rus("задании будут использоваться матрицы размерностью matr[NxN]!")<<endl;
    cout<<Rus("************************************************************************")<<endl;
    cout<<Rus("Для продолжения нажмите любую кнопку...")<<endl;
    while(!kbhit());clrscr();
    cout<<Rus("Введите размерность матриц N:");
    cin>>n;
    do{
        answer=menu_1();
        switch(answer)
        {
        //Создание второго меню
        case 0:{
            do
            {
                bool flag=true;
                answer=menu_1_1();
                switch(answer)
                {
                case 0:break;
                case 1:break;
                case 2:break;
                case 4:
                    flag=false;
                    break;
                }

            }while(flag==true);        
            answer=0;
            break;
            }
        case 1:break;
        case 2:exit(0);
        }
    }while(1);
}
int menu_1(){
    int key=0,code;
    clrscr();
    do {
        clrscr();
        SetColor(14,0);
        cout<<Rus("************************************")<<endl;
        cout<<Rus("**********  ГЛАВНОЕ МЕНЮ  **********")<<endl;
        cout<<Rus("************************************")<<endl<<endl;
        key=(key+3)%3;
        if(key==0){SetColor(13,9);
            cout<<Rus("1. Обработка данных, матриц.")<<endl;}
        else {SetColor(14,0);
            cout<<Rus("1. Обработка данных, матриц.")<<endl;}
        if(key==1){SetColor(13,9);
            cout<<Rus("2. Операции над матрицами.")<<endl;}
        else {SetColor(14,0);
            cout<<Rus("2. Операции над матрицами.")<<endl;}
        if(key==2){SetColor(13,9);
            cout<<Rus("3. Выход из программы.")<<endl;}
        else {SetColor(14,0);
            cout<<Rus("3. Выход из программы.")<<endl;}
        code=getch();
        if(code==224){
            code=getch();
            if(code==80)key++;
            if(code==72)key--;
        }
    }while(code!=13);
    return key;
}
int menu_1_1(){
    int key=0,code;
    clrscr();
    do {
        clrscr();
        SetColor(14,0);
        cout<<Rus("************************************")<<endl;
        cout<<Rus("**  МЕНЮ ОБРАБОТКИ ДАННЫХ МАТРИЦ  **")<<endl;
        cout<<Rus("************************************")<<endl<<endl;
        key=(key+4)%4;
        if(key==0){SetColor(13,9);
            cout<<Rus("1. Ввод данных в матрицы.")<<endl;}
        else {SetColor(14,0);
            cout<<Rus("1. Ввод данных в матрицы.")<<endl;}
        if(key==1){SetColor(13,9);
            cout<<Rus("2. Корректировка данных, матриц.")<<endl;}
        else {SetColor(14,0);
            cout<<Rus("2. Корректировка данных, матриц.")<<endl;}
        if(key==2){SetColor(13,9);
            cout<<Rus("3. Вывод данных из матриц.")<<endl;}
        else {SetColor(14,0);
            cout<<Rus("3. Вывод данных из матриц.")<<endl;}
        if(key==3){SetColor(13,9);
            cout<<Rus("4.   <<< Назад")<<endl;}
        else {SetColor(14,0);
            cout<<Rus("4.   <<< Назад")<<endl;}
        code=getch();
        if(code==224){
            code=getch();
            if(code==80)key++;
            if(code==72)key--;
        }
    }while(code!=13);
    return key;
}

У меня как бы пока все работало нормально, но компилятор Visual C++ 6.0 стал себя нестандартно вести себя в первом case с кодом:
Код

do
            {
                bool flag=true;
                answer=menu_1_1();
                switch(answer)
                {
                case 0:break;
                case 1:break;
                case 2:break;
                case 4:
                    flag=false;
                    break;
                }

            }while(flag==true);

Цикл wile он игнолирует, т.е. нельзя создать бесконечный цикл. В операторе switch он вообще ни к каким элементам не переходит, а перепрыгивает сразу в конец цикла.
Может у меня проблема с программой? Кто-нибудь попробуйте откомпелировать вышеприведенный текст у себя и скажите продвижение по второму меня корректно проходит или нет.
PM MAIL   Вверх
shinoby
Дата 22.11.2009, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Походу разобрался, переменная flag объявленная в цикле отличается от переменной в условии 
wile (flag), отсюда и головоломка...  smile 
PM MAIL   Вверх
mes
Дата 22.11.2009, 18:32 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(shinoby @  22.11.2009,  16:33 Найти цитируемый пост)
   bool flag=false; //позволит определить внесены ли данные в матрицы

желательно чтоб код был максимально самодокументирован, тем более когда использование переменной происходит на "длительном" участке кода.
т.е. переменную лучше было назвать например hasMatrixData, тогда не будет возлагаться столько смысла на комментарий.



--------------------
PM MAIL WWW   Вверх
bsa
Дата 23.11.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
shinoby, если ответ на вопрос получен, то пометь тему решенной

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.