Hello !

I have array of struct and i want
1] when i run the program to load the data from it.
2] when i make changes to be saved in the text file the same time or when i quit the program

I tried to put data in txt file with the following format but i can only read until the space. I do a lot of search but wasn`t able to find what i look for. Mainly i don`t know how to read strings

A1 false Alexa Trina
A2 falseGeorge Ali
A3 false Comina Riviera

My sample code is:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

class classroom
{
public:
    string studentClass;
    bool studentBonus;
    string studentName;

    void classroom::createStudent(string sClass, bool bonus, string name);
};

void classroom::createStudent(string sClass, bool bonus, string name)
{
    studentClass=sClass;
    studentBonus=bonus;
    studentName=name;
}

int main()
{
    //number of students
    const int numstudents=10;
    
    //create structure
    classroom student[numstudents];

    //initialize variables
    student[0].createStudent("A1",false,"Alexa Trina");
    student[1].createStudent("A2",false,"George Ali");
    student[2].createStudent("A3",false,"Comina Riviera");

    return 0;//indicate that program end succesfully
}//end main

Thanks for your time!

Yeah i know, i made some amptempts but are wrong.

I tried getline(inFile, student[0].studentName);

but is wrong

Edited 6 Years Ago by fukki: n/a

Ok, here is.

in the data.txt i have

A1 false Wella Trina
A2 false George Ali
A3 false Comina Riviera

My code is

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class classroom
{
public:
    string studentClass;
    bool studentBonus;
    string studentName;

    void classroom::createStudent(string sClass, bool bonus, string name);
};
void bookStudent(classroom bStudent[]);
void deleteStudent(classroom dStudent[]);
void sortStudent(classroom sStudent[]);
void classroom::createStudent(string sClass, bool bonus, string name)
{
    studentClass=sClass;
    studentBonus=bonus;
    studentName=name;
}

void showMenu(classroom mStudent[])
{
    char option;

    //display the choices of the user
    cout<<"a) Book a student"<<endl;
    cout<<"b) Delete a student"<<endl;
    cout<<"c) Sort students"<<endl;
    cin>> option;

        switch (option)
    {
    case 'a':
        cout<<endl;
        bookStudent(mStudent);
        showMenu(mStudent);
        break;
    case 'b':
        cout<<endl;
        deleteStudent(mStudent);
        showMenu(mStudent);
        break;
    case 'c':
        cout<<endl;
        sortStudent(mStudent);
        showMenu(mStudent);
        break;
    default:
        cout<<endl;
    }
}
void bookStudent(classroom bStudent[])
{
    //declare local variables
    int i=0;

    string bStudentClass;
    bool bStudentBonus;
    string bStudentName;

    //initialize local variables
    bStudentBonus=false;
    

    cin.ignore();
    cout<<"Enter student name"<<endl;
    getline(cin,bStudentName);


    cout<<"Enter seat id: "<<endl;
    cin>>bStudentClass;

    cout<<endl;

    if (bStudentClass=="A1")
        i=0;
    else
    if (bStudentClass=="A2")
        i=1;

    bStudent[i].createStudent(bStudentClass,true,bStudentName);
}
void deleteStudent(classroom dStudent[])
{
    //declare local variables
    int i=0;

    string bStudentClass;
    bool bStudentBonus;
    string bStudentName;

    //initialize local variables
    bStudentBonus=false;

    cout<<"Enter student class "<<endl;
    cin>>bStudentClass;

    cout<<endl;

    if (bStudentClass=="A1")
        i=0;
    else
    if (bStudentClass=="A2")
        i=1;

    dStudent[i].createStudent(bStudentClass,false,"");
}
void sortStudent(classroom sStudent[])
{
     bool doMore;

    do {
        doMore = false;  // assume this is last pass over array
        for (int i=0; i<10-1; i++) {
            if (sStudent[i].studentName > sStudent[i+1].studentName) {
                // exchange elements
                classroom temp = sStudent[i]; sStudent[i] = sStudent[i+1]; sStudent[i+1] = temp;
                doMore = true;  // after exchange, must look again
            }
        }
    } while (doMore);

        for (int j=0;j<10;j++)
        {
            if (sStudent[j].studentBonus==true)
            {
                 cout<<sStudent[j].studentName<<"    "<<sStudent[j].studentClass;
                cout<<endl;
            }
        }
        cout<<endl;
}
int main()
{
    //number of students
    const int numstudents=10;
    
    //create structure
    classroom student[numstudents];

    fstream inFile;
    inFile.open("data.txt", ios::in);

    inFile<<student[0].studentClass<<student[0].studentBonus<<student[0].studentName;
    inFile<<student[1].studentClass<<student[1].studentBonus<<student[1].studentName;
    inFile<<student[2].studentClass<<student[2].studentBonus<<student[2].studentName;

    
    showMenu(student);
    return 0;//indicate that program end succesfully
}//end main

on line 149 you will have to call getline() to read the student name that contains spaces.

If you only want to read the file use ifstream instead of fstream and use >> with ifstream. << is used with ofstream.

inFile>>student[0].studentClass>>student[0].studentBonus;
getline(inFile,student[0].studentName);

Edited 6 Years Ago by Ancient Dragon: n/a

This article has been dead for over six months. Start a new discussion instead.