Здравствуйте! Помогите, пожалуйста! Коротко моё задание: создать базу данных студентов, вывести на консоль, записать данные в файл. В общем, работа на ввод-вывод, всё работает, кроме одного момента! В созданном файле, куда должны записываться данные о студентах, поля типа "char"(имя, фамилие) записываются нормально, а вот вместо полей типа "int"(курс, номер студ. билета) какие-то иероглифы (( Пишу в VisualStudio2008. В чём может быть проблема?
Примечание:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <fstream>
#include <math.h>
#include <ctype.h>
#include <stdio.h>
using namespace std;
struct file
{
char name[10];
char surname[25];
unsigned long student_card;
char birthday[11];
int course;
};
class Student
{public:
friend ostream &operator <<(ostream &, const Student &obj);
friend istream &operator >> (istream &, Student &obj);
friend fstream& operator >> (fstream& input, Student& obj);
friend fstream& operator << (fstream& output, const Student& obj);
file st;
Student()
{
st.name[0]='\0';
st.surname[0]='\0';
st.student_card=0;
st.birthday[0]='\0';
st.course=0;
}
int Method(fstream &input)
{
int count=0;
file ss;
int p;
input.open("data.txt", ios::in);
input.seekg(0, ios::end);
p = input.tellg();
input.seekg(0, ios::beg);
while(p > input.tellg()) {
input.read((char*)&this->st, sizeof(this->st));
if((this->st.course == 3) && (this->st.birthday[4]>'5' ) && (this->st.birthday[4] <'9'))
count++;
}
return count;
}
};
ostream &operator<<(ostream &output, const Student &obj)
{
output << "\n" << setw(10) << setiosflags(1) << obj.st.name;
output << setw(15) << setiosflags(1) << obj.st.surname;
output << setw(1) << setiosflags(1) << obj.st.course;
output << setw(6) << setiosflags(1) << obj.st.student_card;
output << setw(11) << setiosflags(1) << obj.st.birthday;
return output;
}
istream &operator >> (istream &input, Student &obj)
{
cout << "Vvedite imja (max 10 symvolov): "; input >> obj.st.name;
cout << "Vvedite familijy (max 15 symvolov): "; input >> obj.st.surname;
cout << "Vvedite kyrs [1...6]: \t"; input >> obj.st.course;
cout << "Vvedite nomer stydencheskogo bileta (maks6 symvolov): "; input >> obj.st.student_card;
cout << "Vvedite daty rozhdenija (dd.mm.gggg): "; input >> obj.st.birthday;
return input;
}
fstream& operator >> (fstream& input, Student& obj) {
input.read((char*)&obj.st, sizeof(obj.st));
return input;
}
fstream& operator << (fstream& output, const Student& obj) {
output.write((char*)&obj.st, sizeof(obj.st));
return output;
}
int _tmain(int argc, _TCHAR* argv[])
{
int N, i;
cout << "Vvedite kolichestvo stydentov: ";
cin >> N;
Student object;
fstream ff;
cout << "Vvedite informacijy o studentah:";
ff.open("data.txt", ios::out);
for(int i=0; i<N; i++){
cout << "\nStudent " << (i+1) << endl;
cin >> object;
ff << object;
}
ff.close();
cout << "\nBasa stydentov:\n";
cout << setw(10) << setiosflags(1) << "Imja";
cout << setw(15) << setiosflags(1) << "Familie ";
cout << setw(1) << setiosflags(1) << "Kyrs ";
cout << setw(6) << setiosflags(1) << "Studen. bilet ";
cout << setw(11) << setiosflags(1) << "Data rozh-ja";
ff.open("data.txt", ios::in);
for(i=0; i<N; i++) {
ff >> object;
cout << object;
}
ff.close();
int sum = object.Method(ff);
ff.close();
cout << "\n\nKolichestvo stydentov, rozhdennuh letom = " << sum << endl;
return 0;
}
Примечание:
Спасибо. Я уже разобралась, действительно, так получится запись в байтовом виде... Просто меня сначала немного запутали )
Если выводить нужно именно числа, то только через перегрузку с cin и cout.