Форум программистов, компьютерный форум CyberForum.ru

Некорректно записываются числа в файл - C++

Восстановить пароль Регистрация
 
Natkin
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 5
30.04.2013, 14:12     Некорректно записываются числа в файл #1
Всем привет и с наступающими праздниками.
Имеется задание: надо записать в файл строки и числа, введенные с клавиатуры. Должно быть что-то вроде Ivanov Ivan 170 65 4587, а в файл записывается какая-то белиберда: MD Ivanov МММММММММ ММММXMD Ivan МММММММММММ ММММA Є ®
Помогите, пожалуйста, решить проблему.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
class Stud{
private:
    string surname; 
    string name; 
    int weigh; 
    int height; 
    int ticket;
public:
    Stud ();
    Stud::Stud(string s, string n, int h, int w, int t);
    friend ostream & operator<<( ostream& os,Stud& st);
    friend istream& operator>>( istream& is, Stud& st);
};
    Stud::Stud(string s, string n, int h, int w, int t){
    surname=s;name=n;height=h;weigh=w;ticket=t;}
    ostream& operator<<(ostream& os,Stud& st){
    cout<<"Stud data is: ";
    os<<st.surname<<"\t";
    os<<st.name<<"\t";
    os<<st.height<<"\t";
    os<<st.weigh<<"\t";
    os<<st.ticket<<".";
    return os;
}
    istream& operator>>(istream& is, Stud& st){
    is>>st.surname>>st.name>>st.height>>st.weigh>>st.ticket;
    return is;
}
   int main(){
   FILE *f;int n;
   cout << "Enter the file name: ";
   char s[20];
   cin.getline(s, ch, 20);
   f=fopen(s, "wb");
   cout << "Enter the quantity of the students: "; 
   cin >> n;
   for (int i=1; i<=n; i++){
   string sur, nam; int h, w, t;
   cout<<"Enter the data(surname+name+height+weigh+ticket #): ";
   cin>>sur>>nam>>h>>w>>t;
   cout <<sur<<nam<<h<<w<<t;
   Stud stud(sur, nam, h, w, t);
   fwrite(&stud, sizeof(Stud), 1, f);
 }
 fclose(f);
    system("PAUSE");
    return EXIT_SUCCESS;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
30.04.2013, 14:44     Некорректно записываются числа в файл #2
C++
1
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
Writes an array of count elements, each one with a size of size bytes, from the block of memory pointed by ptr to the current position in the stream.

C++
1
fwrite(&stud, sizeof(Stud), 1, f);
подозреваю проблема в том, что Вы пишете в файл по одному байту, в то время как int занимает 4

Добавлено через 12 минут
И еще мне кажется не стоит воспринивать объект класса как массив. Для быстродействия данные в памяти выравниваются в зависимости от праметров системы.
C++
1
2
3
4
5
class c
{
int i;
char j;
}
размер класса с в обычном случае не будет занимать 5 байт(скорее 8)
Предлогаю добывить в класс Stud метод, скажем, bool writeToFile(String fileName = "newFile.txt")
в котором собственно открывать файл и записывать в него данные
Natkin
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 5
30.04.2013, 15:07  [ТС]     Некорректно записываются числа в файл #3
Мне по зданию надо записывать и читать через переопределенные методы ввода/вывода. (( Сейчас мой файл записывается посимвольно, может, есть какой-то универсальный метод записи для всех типов данных, или как-то можно int добавить...
Ден90
2 / 2 / 0
Регистрация: 19.11.2012
Сообщений: 55
30.04.2013, 15:22     Некорректно записываются числа в файл #4
Возможно может помочь выключение выравнивания и запись в файл не по одному байту а целиком
Natkin
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 5
01.05.2013, 02:23  [ТС]     Некорректно записываются числа в файл #5
Тема закрыта
Yandex
Объявления
01.05.2013, 02:23     Некорректно записываются числа в файл
Ответ Создать тему
Опции темы

Текущее время: 07:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru