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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Natkin
0 / 0 / 0
Регистрация: 17.04.2013
Сообщений: 5
#1

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

30.04.2013, 14:12. Просмотров 433. Ответов 4
Метки нет (Все метки)

Всем привет и с наступающими праздниками.
Имеется задание: надо записать в файл строки и числа, введенные с клавиатуры. Должно быть что-то вроде 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2013, 14:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некорректно записываются числа в файл (C++):

Данные записываются в файл некорректно - C++
есть программа &quot;Телефонная книга&quot;, все работает, но когда данные записываются в файл в файле помимо основного записывается мусор, как это...

Ошибка в программе. Данные записываются в файл некорректно - C++
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Моя программа работает некорректно. Пользователь должен вводить номера...

В строке последовательно записываются числа от 1 до k, потом числа повторяются, пока строка не заполнится - C++
Всем привет, помогите с решением этой задачи: Создать динамический двумерный массив размера mxn, заполнить его по следующему правилу:...

В выходной фаил записываются вместе с ответом записываются каракули. Помогите исправить ошибку - C++
#include &lt;iostream&gt; using namespace std; void funk (int n, int k) { freopen(&quot;input.txt&quot;, &quot;rt&quot;, stdin); ...

Не записываются числа - C++
Написал программу, которая с помощью цикла записывает в файл числа от нуля до 423. Но почему то компилятор выдает ошибку если я записываю...

Данные не записываются в файл - C++
Здравствуйте,возникла проблема в написании программы код вот здесь ссылка удалена while (t&lt;=n){ f = fopen(&quot;in.txt&quot;, &quot;w+&quot;);...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ден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
Тема закрыта
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2013, 02:23
Привет! Вот еще темы с ответами:

Не записываются пробелы в файл - C++
Здравствуйте, у меня такая проблема: Вывод в файл происходит в бинарном режиме, но &gt;&gt; при выводе в файл пропускает пробелы. На какую...

Не записываются символы в файл - C++
Нужно считать из файла текст, и записать по символу в новый файл. Почему - то при открытии выходного файла там ничего нет. Помогите найти...

Не записываются данные в бинарный файл - C++
Здравствуйте. Есть такая функция: void SaveBin() { if ((fd=fopen(&quot;file.dat&quot;, &quot;wb&quot;))==NULL) return; // открыть файл int...

Не всегда данные записываются в результирующий файл - C++
Есть программа. Суть ее не важна, важно лишь то, что читает данные, затем записывает результаты Запись идет в строках 61-64 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.05.2013, 02:23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru