Данные строки массива c ++ вставлены, но не отображаются при отображении вывода - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в C ++ и пишу программу на C ++ с использованием массива и очереди.У меня проблема.пока я вставляю данные в массив, проблем нет, но когда я пытаюсь отобразить данные, они не отображают элементы массива правильно, но не показывают данные, которые они показывают пустыми.Пожалуйста, помогите мне об этом.объявляю ли я массив неправильно или что-то еще здесь, обе мои функции ниже.заранее спасибо

    #include <iostream>
#include<conio.h>
#include<stdlib.h>
#include<Windows.h>
#include<string>
#include<bits/stdc++.h>
#define MAX_SIZE 100

using namespace std;

class Candidate {
private:
    int roll_no, i;
    string name,last_degree;
    char gender;
    int arr_roll[MAX_SIZE];
    string arr_name[MAX_SIZE];
    string arr_last_degree[MAX_SIZE];
    char arr_gender[MAX_SIZE];
    int rear;
    int front;

public:

    Candidate() {
        rear = 0;
        front = 0;
    }

    void insertIntoQ() {
        char a;
        do{

            cout << "\nEnter The Roll No : ";
            cin>>roll_no;
            cout << "\nEnter Name of Student";
            cin>>name;
            cout<< "\n Enter Gender M/F";
            cin>>gender;
            cout<<"\nEnter Last Degree";
            cin>>last_degree;            
            arr_roll[rear++] = roll_no;
            arr_name[rear++] = name;
            arr_gender[rear++] = gender;
            arr_last_degree[rear++] = last_degree;
        cout<<"\n Do you want to continue y/n: ";
        cin>>a;
    }while(a=='y'||a=='Y');    

    }


    void display_invigilator_m() {
        cout << "\n## Queue Size : " << (rear - front);
        for (i = front; i < rear; i++){        
            if(arr_gender[i] == 'm'){
                cout<<"\nRoll No : "<<arr_roll[i];
                cout<<"\nName : "<<arr_name[i];
                cout<<"\nGender : "<<arr_gender[i];
                cout<<"\nLast Degree : "<<arr_last_degree[i];
            }            
        }
    }
};

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

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Если вы изучаете C ++, я предлагаю несколько улучшений вашего кода.

1-е использование контейнеров C ++, таких как std :: vector или std: queue, вместо массивов в стиле C (вы используете старый подход).

2-й, вы должны лучше воспользоваться объектно-ориентированным.Кандидат должен быть единственным кандидатом, ваша очередь должна быть очередью кандидатов.Хороший дизайн ООП - это строительный блок вашей программы.

Вот пример:

#include <stdlib.h>
#include <iostream>
#include <queue>
#include <string>

using namespace std;

class Candidate
{
   public:
    Candidate(int roll_no, string name, string last_degree, char gender)
        : _roll_no(roll_no), _name(name), _last_degree(last_degree), _gender(gender)
    {}

    void print()
    {
        cout << "\nCandidate:";
        cout << "\n Roll No : " << _roll_no;
        cout << "\n Name : " << _name;
        cout << "\n Gender : " << _gender;
        cout << "\n Last Degree : " << _last_degree;
    }

    char getGender() { return _gender; }

   private:
    int _roll_no;
    string _name;
    string _last_degree;
    char _gender;
};

class App
{
   public:
    void getCandidatesFromUser()
    {
        char choice;
        do
        {
            int roll_no;
            string name;
            char gender;
            string last_degree;

            cout << "\nEnter The Roll No: ";
            cin >> roll_no;
            cout << "\nEnter Name of Student: ";
            cin >> name;
            cout << "\nEnter Gender M/F: ";
            cin >> gender;
            cout << "\nEnter Last Degree: ";
            cin >> last_degree;

            // Create candidate instance
            Candidate candidate(roll_no, name, last_degree, gender);
            // Store in queue
            _candidates.push(candidate);

            cout << "\n Do you want to continue y/n: ";
            cin >> choice;
        } while (choice == 'y' || choice == 'Y');
    }

    void display()
    {
        cout << "\n## Queue Size : " << _candidates.size();

        while (!_candidates.empty())
        {
            Candidate candidate = _candidates.front();
            if (candidate.getGender() == 'm' || candidate.getGender() == 'M')
            {
                candidate.print();
            }
            _candidates.pop();
        }
    }

   private:
    queue<Candidate> _candidates;
};

int main()
{
    App myApp;
    myApp.getCandidatesFromUser();
    myApp.display();
}
0 голосов
/ 29 мая 2018

Вы должны увеличивать rear один раз за итерацию, а не при каждом назначении.

Следующее:

        arr_roll[rear++] = roll_no;
        arr_name[rear++] = name;
        arr_gender[rear++] = gender;
        arr_last_degree[rear++] = last_degree;

должно быть:

        arr_roll[rear] = roll_no;
        arr_name[rear] = name;
        arr_gender[rear] = gender;
        arr_last_degree[rear] = last_degree;
        ++rear;

(илиэквивалентны.) * * 1 010

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...