Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.11.2014
Сообщений: 15

Бесконечное появление меню в консоли

11.11.2014, 00:00. Показов 4129. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При попытке добавления записи через меню, меню начинает появляться в бесконечном количестве в консоли. Как исправить? Вроде проблема в функции 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
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include <iostream.h>
#include <string.h>
#include <fstream.h>
#include <windows.h>
#include <conio.h>
//using namespace std;
 
struct directory        //определение структуры directory
{
    char book[40];      //название книги
    char author[40];    //автор
    char publ[20];      //издательство
    char type[20];      //раздел библиотеки
    char avail[3];      //наличие
    char origin[15];    //происхождение
    char  rating[1];     //субъективная оценка
};
directory mass[60]; //массив структур
int N;//количество элементов
char filename[] = "Biblio.txt";
int inFile()//чтение из файла 
{
    ifstream fr;      // входной файловый поток 
    fr.open(filename); // открываем файл и связываем его с потоком fr
    if (!fr)          // Проверить правильность открытия файла
    { 
        cerr << "File not found\n";
        return 0;           
    }
    N=0;
    while(!fr.eof())//читаем элементы из файлового потока fr
    {
        fr>>mass[N].book;
        if(mass[N].book[0]=='\0') break;
        fr>>mass[N].author;
        fr>>mass[N].publ;
        fr>>mass[N].type;
        fr>>mass[N].avail;
        fr>>mass[N].origin;
        fr>>mass[N].rating;
        N++;
    } 
    fr.close();//закрытие потока
    cout<<"\nRead data from the file "<<filename<<endl;
    return 0;
}
int Out()//вывод записей на экран
{
 
    if(mass[0].book[0]=='\0') 
    {
        system("cls");
        cout<<"\nNo records. Take a reading from the file.\n";
        return 0;
    }
    else
    system("cls");
    for(int i=0;i<N;i++)//цикл по записям
        cout<<i<<". "<<mass[i].book<<" "<<mass[i].author<<" "<<mass[i].publ<<" "<<
        mass[i].type<<" "<<mass[i].avail<<" "<<mass[i].origin<<" "<<mass[i].rating<<endl;//вывод на экран записей
    return 0;
}
int outFile()//вывод записей в файл 
{
    ofstream fr;      // выходной файловый поток   
    fr.open(filename); // открываем файл и связываем его с потоком fr
    if (!fr)          // Проверить правильность открытия файла
    { 
        cerr << "\nFile not found\n";
        return 0;            
    }
    if(mass[0].book[0]=='\0') //если нет записей в структуре
    {
        cout<<"\nNo records. Take a reading from the file.\n";
        return 0;
    }
    for(int i=0;i<N;i++)//запись элементов в файловый поток
    {
        fr<<mass[i].book<<endl;
        fr<<mass[i].author<<endl;
        fr<<mass[i].publ<<endl;
        fr<<mass[i].type<<endl;
        fr<<mass[i].avail<<endl;
        fr<<mass[i].origin<<endl;
        fr<<mass[i].rating<<endl;
    }
    fr.close();
    cout<<"\nData in the file recorded\n "<<filename<<endl;
    return 0;
}
 
int Add()//добавление записей
{
    cin.clear();
    while(cin.get() != '\n')
    cout <<"Enter name of book: " << endl;
    cin.getline(mass[N].book,40);
    cout <<"Enter author: " << endl;
    cin.getline(mass[N].author,40);
    cout <<"Enter publishing house: " << endl;
    cin.getline(mass[N].publ,20);
    cout <<"Enter type: " << endl;
    cin.getline(mass[N].type,20);
    cout <<"Availability? YES/NO: " << endl;
    cin.getline(mass[N].avail,3);
    cout <<"Origin of book: " << endl;
    cin.getline(mass[N].origin,15);
    cout <<"Enter rating (1-5): " << endl;
    cin.getline(mass[N].rating,1);
    N++;
    Out();
    outFile();
    return 0;
}
int Delete()//удаление записей
{
    int n, i;
    cout<<"\nEnter the number of the item to remove ";
    cin>>n;
    i=n;
    while(i<N)  //смещаем элементы массива на 1, тем самым удаляем n-1 элемент
    {
        mass[i]=mass[i+1];
        i++;
    }
    mass[N-1].book[0]='\0';//удаляем послед элемент
    N--;//уменьшаем количество элементов на 1
    Out();
    outFile();
    return 0;
}
int Sortbyauthor()//сортировка по author
{
    if(mass[0].book[0]=='\0') //если нет записей в структуре
    {
        system("cls");
        cout<<"\nNo records. Take a reading from the file.\n";
        return 0;
    }
    //сортировка методом простого обмена
    for(int i=0;i<N;i++)
        for(int j=N-1;j>=i;j--)
            if(strcmp(mass[j].author,mass[j-1].author)<=0)
                {
                    directory buf=mass[j];
                    mass[j]=mass[j-1];
                    mass[j-1]=buf;
                };
    outFile();      
    Out();
    cout<<"\nSorting finished.\n";
    return 0;
}
int Sortbytype()
{
    if(mass[0].book[0]=='\0') 
    {
        system("cls");
        cout<<"\nNo records. Take a reading from the file.\n";
        return 0;
    }
    for(int i=0;i<N;i++)
        for(int j=N-1;j>=i;j--)
            if(strcmp(mass[j].type,mass[j-1].type)<=0)
                {
                    directory buf=mass[j];
                    mass[j]=mass[j-1];
                    mass[j-1]=buf;
                };
    outFile();
    Out();  
    cout<<"\nSorting finished.\n";
    return 0;
}
int Find()//поиск записей по запросу название и автор
{
    if(mass[0].book[0]=='\0') //если нет записей в структуре
    {
        system("cls");
        cout<<"\nNo records. Take a reading from the file.\n";
        return 0;
    }
    char fbook[40];
    char fauthor[40];
    cout<<"Enter book`s name: ";
    cin>>fbook;
    cout<<"Enter author`s name: ";
    cin>>fauthor;
    for(int i=0;i<N;i++) 
        if((strcmp(mass[i].book,fbook)==0)&&(strcmp(mass[i].author,fauthor)==0))
        {
            cout<<mass[i].avail<<endl;
            break;
        }
    system("cls");  
    return 0;
}
int what()
{
system("cls");
cout<<"\nWhat is this? O_o\n";
}
 int main()
{
    if (inFile()!=0) {cout << "Cannot read file" << endl;return 0;};
    int N=0;//Номер пункта
    while(N!=8) 
    {
        //----меню вывода--------
        cout<<"\nEnter the item number:\n P.s. I like Gabe Newell don`t know the number 3 =D\n";
        cout<<"1: display\n";
        cout<<"2: sorting by author\n";
        cout<<"4: sorting by type\n";
        cout<<"5: find the book\n";     
        cout<<"6: add a record\n";
        cout<<"7: delete a record\n";
        cout<<"8: exit\n";
        //----------------------
        cin>>N;//считываем из экрана номер пункта
        switch(N)
        {
        case 1: Out(); break; //вывод на экран
        case 3: what(); break; //вывод на экран what()
        case 2: Sortbyauthor(); break;//сортировка по автору
        case 4: Sortbytype(); break;//сортировка по разделу
        case 5: Find(); break;//Поиск книги
        case 6: Add(); break;//добавление
        case 7: Delete(); break;//удаление записей
        default: cout<<"\nНекорректный номер пункта\n"; break;
        }
    }
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2014, 00:00
Ответы с готовыми решениями:

Плавное появление символа в консоли
Добрый день. Необходимо реализовать &quot;плавное&quot; появление столбца символов в консоли. Идея сего действия заключается в следующем: Разбиваем...

Меню в консоли
По условию нужно сделать что-то вроде меню в консоли. Чисто теоретически порядок знаю, но с реализацией проблемы((( в while массив из 5...

Меню в консоли
Меня интересует вот что: зачем в функции int menu(); вот это условие code=getch(); if (code==224) ...

27
0 / 0 / 0
Регистрация: 10.11.2014
Сообщений: 15
11.11.2014, 00:55  [ТС]
Студворк — интернет-сервис помощи студентам
У меня при 8 и так выходит. А вот проблема с лишним вводом после ввода 6 осталась. 6 ввожу и ещё раз надо либо сразу enter либо что-то ввести и enter. Лишь после этого анкета введите то, введите другое.
0
 Аватар для raister32
6 / 6 / 6
Регистрация: 16.12.2013
Сообщений: 69
11.11.2014, 01:00
Rary, ты точно здесь
C++
1
2
3
4
5
6
7
8
9
10
struct directory        //определение структуры directory
{
    char book[40];      //название книги
    char author[40];    //автор
    char publ[20];      //издательство
    char type[20];      //раздел библиотеки
    char avail[4];      //наличие
    char origin[15];    //происхождение
    char  rating[2];     //субъективная оценка
};
все исправил и подстроил под это
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
int Add()//добавление записей
{
    while(cin.get()!= '\n')
    cin.clear();
 
    cout <<"Enter name of book: " << endl;
    cin.getline(mass[N].book,40);
    cout <<"Enter author: " << endl;
    cin.getline(mass[N].author,40);
    cout <<"Enter publishing house: " << endl;
    cin.getline(mass[N].publ,20);
    cout <<"Enter type: " << endl;
    cin.getline(mass[N].type,20);
    cout <<"Availability? YES/NO: " << endl;
    cin.getline(mass[N].avail,4);
    cout <<"Origin of book: " << endl;
    cin.getline(mass[N].origin,15);
    cout <<"Enter rating (1-5): " << endl;
    cin.getline(mass[N].rating,2);
    N++;
    Out();
    outFile();
    return 0;
}
Просто у меня все отлично работает

Добавлено через 1 минуту
Rary, да еще введеные данные сверху над менюшкой выводятся.
0
0 / 0 / 0
Регистрация: 10.11.2014
Сообщений: 15
11.11.2014, 01:02  [ТС]
Я там везде по сотне проставил.

Добавлено через 1 минуту
Всё равно проблема с лишним вводом осталась.
0
 Аватар для raister32
6 / 6 / 6
Регистрация: 16.12.2013
Сообщений: 69
11.11.2014, 01:03
хз, у меня на qt creator работает нормально, только почемуто данные выводятся сверху над менюшкой все время.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.11.2014, 01:04
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Так а это что такое
C++
1
2
while(cin.get() != '\n')
cout <<"Enter name of book: " << endl;
Почему приглашение на ввод названия книги делается в цикле?
Точка с запятой, в конце первой строки, забыта.
0
0 / 0 / 0
Регистрация: 10.11.2014
Сообщений: 15
11.11.2014, 01:05  [ТС]
Я там вывод прописывал. Правда много раз не должен выводиться, т.к. очистку экрана я тоже прописал.
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
11.11.2014, 01:06
Цитата Сообщение от Rary Посмотреть сообщение
Я там везде по сотне проставил.
Добавлено через 1 минуту
Всё равно проблема с лишним вводом осталась.
Код нужно показывать.
0
 Аватар для raister32
6 / 6 / 6
Регистрация: 16.12.2013
Сообщений: 69
11.11.2014, 01:13
C++
1
2
3
4
5
6
int what()
{
system("cls");
cout<<"\nWhat is this? O_o\n";
return 0;
}
Rary,
ретурн забыл поставить может проблема в этом??

Добавлено через 4 минуты
Rary, ретурн помог?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.11.2014, 01:13

Меню на консоли
Здравствуйте! Изучаю C++, для практики ради делаю консольное меню через класс. Может быть мне, пока что, ещё далеко до претендента на...

Меню в консоли
есть код для менюшки, по идее при нажатии стрелок вверх или вниз, должен передвигаться флажок -&gt; , но почему то не передвигается,...

Оригинальное меню в консоли
Доброго вечера, помогите разобраться с некоторым кодом, в котором содержится интересное консольное меню с помощью goto xy. Искал в нэте...

Организация меню в консоли
всем доброе время суток необходимо организованить меню: Для выбора метода вычисления корня уравнения использовать меню, разработанное с...

Работа с меню в консоли
я написал программу #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; #include&lt;iomanip.h&gt; #include&lt;system.hpp&gt; int...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru