Вывод данных типа int в файл, С++, помогите!

Компьютеры программирование программы java С++

Здравствуйте! Помогите, пожалуйста! Коротко моё задание: создать базу данных студентов, вывести на консоль, записать данные в файл. В общем, работа на ввод-вывод, всё работает, кроме одного момента! В созданном файле, куда должны записываться данные о студентах, поля типа "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.
Ответы:
Ты дурак или как? Это и есть твои числа, в нативном виде, чтобы в тексте выводить конвертировать в текст надо.
Дело в том, что вы работаете с файлом в бинарном режиме. В таком режиме целое число записывается в файл как есть, то есть в виде четырех байт. Если попытаться посмотреть такой файл текстовым редактором, будут иероглифы :)


13 лет назад

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

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

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