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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависание программы при вводе в строку "Ctrl+Z" 
V
    Опции темы
oshilan
Дата 5.6.2010, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



При вводе сочетания клавиш Ctrl+Z (конец файла) при заполнении полей списка и последующем нажатии на Enter программа зависает. Программа скомпилирована в Borland C++ 3.1. Я использую динамический список (однонаправленный). Как можно избежать этого зависания при вводе того сочетания клавиш. Текст программы представлен ниже:
Код
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <iomanip.h>
#include <string.h>

class InDB                            //ancestor of hoerarchy
{ public:
        char name[5];                     //name of a product
        char brand[10];                   //brand of a product
        int count;                        //count of a product
        InDB *top;                        //pointer to the "head" of a list
        InDB *next;                       //pounter to the next element of a list
        void ReadConsole();               //reading DB from console
};

void InDB::ReadConsole()                //read from a console
{ clrscr();
    char yn;                              //"yes" or "no" for continue
    InDB *db=top;
    cout<<"Entering...\nName: ";
    cin>>db->name;                        //reading data from console
    cout<<"Brand: ";
    cin>>db->brand;
    cout<<"Count: ";
    cin>>db->count;
    db->next=NULL;
        cout<<"\nDo you want to continue entering data [y/n]? ";
    cin>>yn;
    while(yn=='y' || yn=='Y')           //cycle read from console after continue
        { db->next=new InDB;
            db=db->next;
            cout<<"\nName: ";
            cin>>db->name;
            cout<<"Brand: ";
            cin>>db->brand;
            cout<<"Count: ";
            cin>>db->count;
            db->next=NULL;
            cout<<"\nDo you want to continue entering data [y/n]? ";
            cin>>yn;
        }
};

char menu()                //main menu
{ char mech;                    //number of choise in menu
    cout<<"q. Read DB from console\n";
    cout<<"!. Exit\n\n";
  cout<<"Enter \"q\": ";
  cin>>mech;
    return mech;
}

void main()
{ InDB *p=new InDB();          //creating pointers to functions
clrscr();
    char com;                    //number of choise
  do
        { switch(com=menu())
                { case 'q': p->ReadConsole(); break;
                    default : clrscr(); break;
                }
        }while(com!='!');
}


Это сообщение отредактировал(а) oshilan - 5.6.2010, 13:06
PM MAIL   Вверх
bsa
Дата 5.6.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



добавь дополнительное условие в while: while(cin && (yn=='y' || yn=='Y'))

Кстати, я бы main написал так:
Код
void InDB::ReadConsole()
{
    clrscr();
    InDB *db=top;
    while(cin)           //cycle read from console after continue
    {
            cout << "\nName: ";
            cin >> db->name;
            cout << "Brand: ";
            cin >> db->brand;
            cout << "Count: ";
            cin >> db->count;
            cout << "\nDo you want to continue entering data [y/n]? ";
            char yn = 'n';
            cin >> yn;            //"yes" or "no" for continue
            if (yn != 'y' && yn != 'Y') {
                 db->next=NULL;
                 break;
           }
           db->next=new InDB;
           db=db->next;
      }
}

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

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

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

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

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


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

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


 




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


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

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