c ++数组字符串数据已插入,但在显示输出时未显示

时间:2018-05-29 05:14:20

标签: c++ arrays string

我是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];
            }            
        }
    }
};

这些函数用于插入和显示数据。 我在main函数中调用这些函数 请帮帮我

2 个答案:

答案 0 :(得分:1)

每次迭代应增加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 :(得分:1)

如果您正在学习C ++,我建议您对代码进行一些改进。

第一次使用C ++容器,例如std :: vector或std:queue而不是C样式数组(您使用的是旧方法)。

第二,你应该更好地利用面向对象的优势。候选人应该是一个候选人,你的队列应该是一个候选队列。良好的OOP设计是您计划的重要组成部分。

以下是一个例子:

#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();
}