с++,циклическая очередь, сразу норм выводит, а потом на где-то логика нарушается и неправильно выводит

Компьютеры программирование программы проблема с++

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


#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <iostream>
#include <conio.h>
#define MAX 3
using namespace std;
int q[MAX];
int qnext=0,qindex=0,qlength=MAX;


int main(void)
{
void Add(void);
int Delete(void);
void Print(void);
setlocale(0,"");
for(int t=0; t < MAX; ++t) q[t] = NULL;
int a;
bool flag=true;
while(flag)
{
printf("Выберите требуемый пункт меню:\n");
printf("Ввести (1), Удалить (2), Список (3),Выход (0): ");
cin >> a;

switch(a)
{
case 0: flag=false; break;
case 1: Add(); break;
case 2: Delete(); break;
case 3: Print(); break;
default: printf("Введено некорректное значение. Попробуйте еще раз!\n\n");
}
}
}

void Add(){
if(qnext+1 == qindex || (qnext == qlength && !qindex))
{
cout<<"Мест нет! Очередь будет переполнена!\n";
qnext=0;
scanf("%d", &q[qnext]); //запись;
// Смещение позиции записи
// Циклический переход.
return;
}
scanf("%d", &q[qnext]); //запись;
qnext++; // Смещение позиции записи
if(qnext>qlength)
qnext=0; // Циклический переход.
}

int Delete()
{
if(qindex == qlength)
qindex=0; // Циклический переход.
if(qindex+1 == qnext)
{
cout<<"Очередь пуста.\n";
return 0;
}
qindex++; // Смещение позиции считывания
return q[qindex-1]; // Считывание
}

void Print(void)
{
for(int t=qindex; t < MAX; t++)
if (q[t]!=NULL)
printf("%d. %d\n", t+1, q[t]);
}

Примечание:
нарушается после того как удаляю элемент, и добавляю элемент снова

Примечание:
где с индексами напутано? помогите, пожалуйста, ссылка не помогла(

Примечание:
"Зачем может сразу return; и все."
Но у меня ведь, надо добавлять элемент и в переполненнцю очередь

Примечание:
про qindex я тоже заметила, но как исправить?
Ответы:
пример по ссылке
Сначале добавляете элементы затем удаляете
void Add(){
if(qnext+1 == qindex || (qnext == qlength && !qindex))
{
 cout<<"Мест нет! Очередь будет переполнена!\n";
qnext=0;
scanf("%d", &q[qnext]);   //запись;
return;


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.