С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 7
1

Почему программа себя странно ведет: зацикливается после ввода значений?

16.05.2014, 01:18. Показов 1651. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Зацикливается после воода значений. Подскажите пожалуйста в чем может быть проблема.

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
#include <fstream>
#include <iostream>
#include "Library.h"
using namespace std;
 
void addbook()
{
    book one;
    cout<<"\nPlease enter book's name: ";
    cin.getline(one.name,30);
    getchar();
    cout<<"\nPlease enter book's author: ";
    cin.getline(one.author,40);
    getchar();
    cout<<"\nPlease enter book's genre: ";
    cin.getline(one.genre,20);
    getchar();
    cout<<"\nPlease enter book's year: ";
    cin>>one.year;
    cout<<"\nPlease enter book's authentication number: ";
    cin>>one.code;
    ofstream lib ("library.book",ios::app  | ios::binary);//открытие файла для записи в бинарном режиме, все операции будут помещены в конец файла.
    lib.write((char*)&one,sizeof (book));// посимвольная запись в файл, (char*)&one -> получение адреса, откуда начинаем писать
    cout<<"New data have been added\n";
    lib.close();
}
void findbook()
{
    ifstream two("library.book",ios::binary);
    if(!two)
    {
        cout<< "Error."<<endl;
        system("PAUSE");
    }
    else
    {
        two.seekg(0,ios::end);//указатель в конец
        int size=two.tellg();//tellg используем, чтобы получить позицию указателя, после того, как переставили его в конец.
        size=size/sizeof(book);
        book*one=new book[size];
        two.seekg(0,ios::beg);
        two.read((char *)one, sizeof(book)*size);
        char find[30];
        cout<<"\n[SEARCH]\nEnter book: ";
        cin.getline(find,30);
        getchar();
        for(int i=0;i<size;i++)
        {
            if(strcmp(one[i].name, find))
                cout<<"Search progress: "<<i+1<<size<<"[NOT FOUND]"<<endl;
            else cout<<"Book with name "<<one[i].name<< "[FOUND]!"<<endl;
        }
        cout<<endl<<endl;
        two.close();
    }
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
16.05.2014, 01:18
Ответы с готовыми решениями:

класс string. Программа странно себя ведет
Программа странно себя ведет. После первого ввода имени и номера сотрудника, пропускает последующие...

Почему график ведет себя странно
График отрисовывается на ура, пока икс не возвожу в квадрат. Подскажите пожалуйста, как исправить...

Программа ведет себя очень странно
Конкретно: Стартую поток... FThread := TWorkerThread.Create(true); ...

Компьютер странно себя ведёт после чистки
Здравствуйте дорогие форумчане. Пришёл поделиться с вами проблемой которая возникла у меня после...

8
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
16.05.2014, 01:35 2
Цитата Сообщение от Sevenex Посмотреть сообщение
Зацикливается после воода значений. Подскажите пожалуйста в чем может быть проблема.
А можете конкретно сказать, в какой из функций?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 01:42 3
main() покажите. И зачем, после getline(), getchar() ?
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
16.05.2014, 01:43 4
Sevenex, весь код в студию.
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 7
16.05.2014, 02:40  [ТС] 5
Вот main


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
#include <iostream>
#include "Library.h"
using namespace std;
int main()
{
    int choise;
    do
    {
        system("cls");
        cout<< ">>>MENU<<<"<< endl;
        cout<< "Welcome to the Virtual Library\n Please choose the option and enter it's number!"<< endl;
        cout<< "[1] Add a new book."<<endl;
        cout<< "[2] Add a new user."<<endl;
        cout<< "[3] View data."<<endl;
        cout<< "[4] Exclude a book from user."<<endl;
        cout<< "[5] Find book."<<endl;
        cout<< "[6] Sort books by author."<<endl;
        cout<< "[7] Exit."<<endl;
 
        cout<<"Please enter your choise from [1] to [7] : ";
        cin>> choise;
 
        switch(choise)
        {
        case 1: system("cls");addbook(); break;
        case 2: system("cls");findbook(); break;
        case 3: system("cls");break;
        case 4: system("cls");break;
        case 5: system("cls");break;
        case 6: system("cls");break;
        case 7: cout<<"See you soon! ;)"<<endl; break;system("PAUSE");return 0;
        default: cout<<" Can't find such a choise. ;("<<endl; system("PAUSE"); return 0;
        }
    }
    while (choise!=7);
 
 
        system("PAUSE");
        return 0;
    }
 
[size="1"][color="grey"][I]Добавлено через 21 секунду[/I][/color][/size]
Вот library.h
 
struct book
{
    char name[30];
    char author[40];
    int year;
    int code;
    char genre[20];
};
void addbook();
void showbook();
void findbook();
void sortbook();
0
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
16.05.2014, 03:02 6
У вас же цикл
C++
1
2
3
do{
...
while(choise!=7);
Не? Вот и зацикливается
Или напишите, где конкретно проблема. В какой-то функции, или что. Больше информации.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 04:01 7
C++
1
(cin >> choise).get();
???
Цитата Сообщение от alsav22 Посмотреть сообщение
И зачем, после getline(), getchar() ?
0
0 / 0 / 0
Регистрация: 05.05.2014
Сообщений: 7
16.05.2014, 14:51  [ТС] 8
(cin >>choise).get(); помогло большое спасибо.
поисковик только криво очень работает.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.05.2014, 20:47 9
???
Цитата Сообщение от alsav22 Посмотреть сообщение
И зачем, после getline(), getchar() ?
0
16.05.2014, 20:47
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
16.05.2014, 20:47
Помогаю со студенческими работами здесь

Есть блок с positioin:fixed; почему он так странно себя ведет?
Разметка: &lt;div class=&quot;one&quot;&gt; &lt;div class=&quot;two&quot;&gt;&lt;/div&gt; &lt;/div&gt; Стили:

HP Pavilion g6 странно себя ведёт после повторного включения
День добрый, В общем ноутбук HP g6, и проблема такая: ноутбук включается и работает идеально, но...

Программа, работающая с Oracle, на другой машине ведет себя странно
Здравствуйте! Такая проблема. Написала маленькое приложение на C# для работы с Oraclом. На моем...

После установки нового сетевого драйвера, пк странно себя ведет
После установки нового сетевого драйвера, появилась следующая проблема: при включении пк...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru