Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 14:11   #1
aleks.halk
Пользователь
 
Регистрация: 09.10.2010
Сообщений: 14
По умолчанию С++ Проблема с записью в файл структуры

помогите пожалуйста!!!
столкнулся с проблемой - при записи в файл структуры возникают проблемы, если поля структуры типа int сщдержат некоторые числа. Я случайно нашел 2 таких числа - 794 и 1050. При записи fwrite возвращает 1, т.е. запись прошла без ошибок, а при чтении когда доходит до полей структуры с таким числом показывает конец файла. С другими числами работает нормально. В чем может быть проблема?

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <windows.h>
#include <string.h>
#include <ctype.h>

// Rus
char buf [256];

char *RusUni ( char *s )
{
CharToOem( s, buf );
return buf;
}


// Структура, описывающая самолет
struct sAirplane
{
char Modification [50]; // Модификация
char Developer [50]; // Разработчик
char Country [20]; // Страна
int Year; // Первый полет, год
char Type [50]; // Тип
struct // Двигатель
{
char Type [50]; // Тип двигателя
int Power; // Мощность двигателя, л.с.
} Engine;
int HighSpeed; // Максимальная скорость, км/ч
int PracticalDistance; // Практическая дальность, км
int TimeToClime; // Скороподъемность, м/мин
int PracticalCeiling; // Практический потолок, м
char Armament [200]; // Вооружение
}Airplane1, Airplane2;

FILE *FileBase; // Файловая переменная
char FileName [15] = ""; // Имя файла
char FileExpansion [5] = ".dat"; // Расширение файла


int main(int argc, char* argv[])
{
Airplane1.HighSpeed = 794;
Airplane1.Year = 795;

printf ("\n | %-74s |", RusUni (" Введите имя файла: "));
gets (FileName);
strcat (FileName, FileExpansion); // Склеивание имени и расширения файла

if((FileBase = fopen (FileName, "w")))// открытие потока
{
fwrite (&Airplane1, sizeof (sAirplane), 1, FileBase);
fclose (FileBase);
} // Закрытие потока

printf ("\n | %-30s%-45s|", RusUni (" Модификация: "), Airplane1.Modification);
printf ("\n | %-30s%-45s|", RusUni (" Разработчик: "), Airplane1.Developer);
printf ("\n | %-30s%-45s|", RusUni (" Страна: "), Airplane1.Country);
printf ("\n | %-30s%-45d|", RusUni (" Первый полет, год: "), Airplane1.Year);
printf ("\n | %-30s%-45s|", RusUni (" Тип: "), Airplane1.Type);
printf ("\n | %-30s%-45s|", RusUni (" Тип двигателя: "), Airplane1.Engine.Type);
printf ("\n | %-30s%-45d|", RusUni (" Мощность двигателя: "), Airplane1.Engine.Power);
printf ("\n | %-30s%-45d|", RusUni (" Максимальная скорость, км/ч: "), Airplane1.HighSpeed);
printf ("\n | %-30s%-45d|", RusUni (" Практическая дальность, км: "), Airplane1.PracticalDistance);
printf ("\n | %-30s%-45d|", RusUni (" Скороподъемность, м/мин: "), Airplane1.TimeToClime);
printf ("\n | %-30s%-45d|", RusUni (" Практический потолок, м: "), Airplane1.PracticalCeiling);
printf ("\n | %-30s%-45s|", RusUni (" Вооружение: "), Airplane1.Armament);


if((FileBase = fopen (FileName, "r"))) // открытие потока
{
fread (&Airplane2, sizeof (sAirplane), 1, FileBase);
fclose (FileBase);
}// Закрытие потока
printf ("\n | %-30s%-45s|", RusUni (" Модификация: "), Airplane1.Modification);
printf ("\n | %-30s%-45s|", RusUni (" Разработчик: "), Airplane2.Developer);
printf ("\n | %-30s%-45s|", RusUni (" Страна: "), Airplane2.Country);
printf ("\n | %-30s%-45d|", RusUni (" Первый полет, год: "), Airplane2.Year);
printf ("\n | %-30s%-45s|", RusUni (" Тип: "), Airplane2.Type);
printf ("\n | %-30s%-45s|", RusUni (" Тип двигателя: "), Airplane2.Engine.Type);
printf ("\n | %-30s%-45d|", RusUni (" Мощность двигателя: "), Airplane2.Engine.Power);
printf ("\n | %-30s%-45d|", RusUni (" Максимальная скорость, км/ч: "), Airplane2.HighSpeed);
printf ("\n | %-30s%-45d|", RusUni (" Практическая дальность, км: "), Airplane2.PracticalDistance);
printf ("\n | %-30s%-45d|", RusUni (" Скороподъемность, м/мин: "), Airplane2.TimeToClime);
printf ("\n | %-30s%-45d|", RusUni (" Практический потолок, м: "), Airplane2.PracticalCeiling);
printf ("\n | %-30s%-45s|", RusUni (" Вооружение: "), Airplane2.Armament);
gets (FileName);
return 1;
}
aleks.halk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью в файл (Паскаль) ThisIzGame Помощь студентам 2 24.03.2010 06:45
Проблема с записью текста в файл AK BULLETS Помощь студентам 3 19.03.2010 19:22
Проблема с записью в файл baltushka Помощь студентам 0 14.06.2009 17:39
Проблема с записью структуры в файл JamS007 Общие вопросы C/C++ 5 07.01.2009 23:13
Проблема с записью в файл...( Regloger Помощь студентам 10 15.11.2007 17:49