Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Бинарные файлы 
V
    Опции темы
Hikolay
Дата 16.2.2009, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Здравствуйте!
Собственно такая задача:
Дан файл с числами типа int. Не используя промежуточного файла и оперативной памяти, удалить все первые элементы пар чисел, сумма которых превышает некоторое заранее заданное число.

Поискав в MSDN нашел две функции для работы с бинарными файлами _putw()-записывает число в файл и _getw()-считывает число из файла.

Код
    FILE *f;
    int i,z;
    f=fopen("int.txt","wb");
    for (i=0;i<10;i++)
    {
        printf("Input number %d: ",i+1);
        scanf("%d",&z);
        _putw(z+0x2132,f);//так было в примере 
    }
    printf("\n");
    rewind(f);
    for (i=0;i<10;i++)
    {
        printf("%d ",_getw(f)-0x2132);
    }

    fclose(f);


Но при выдачи на экран из файла выдает: 
-8499 -8499 -8499 -8499 -8499 -8499 -8499 -8499 -8499 -8499 

Хотя числа вводил подряд от 1 до 10.

Так вот хотел бы узнать в чем проблема?


Модератор: пользуйся кнопкой "Код"

Это сообщение отредактировал(а) bsa - 16.2.2009, 11:43
PM MAIL   Вверх
cutwater
Дата 16.2.2009, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



посмотрите ф-ции fread и fwrite
в документации (man 3 getw) рекоммендуется пользваться ими.
Совершенно непонятны магические числа.
и убедительная просьба пользоваться кнопкой "код"

Добавлено через 5 минут и 10 секунд
И кстати заметил что у Вас файл открыт только на запись. 

Это сообщение отредактировал(а) cutwater - 16.2.2009, 01:50


--------------------
user posted image
PM MAIL   Вверх
Hikolay
Дата 16.2.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Благодарю за помощь. Зарыл файл и открыл для чтения и все решилось.
PM MAIL   Вверх
Hikolay
Дата 28.5.2009, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



У меня еще тут вопросик: а как можно отезать не нужный кусок файла? Т.е. я сместил чатсь чисел вперед, а последних там быть не должно. Может есть какой-то символ как в строках похожий на '\0'?
PM MAIL   Вверх
andrew_121
Дата 28.5.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Hikolay, Да.
позиционируетесь...
SetEndOfFile((HANDLE)_get_osf_handle(fileno(f)));



--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Hikolay
Дата 28.5.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Благодарю, буду пробовать

Добавлено через 1 минуту и 58 секунд
А если без WinAPI функций можно как-нибудь сделать?
PM MAIL   Вверх
andrew_121
Дата 29.5.2009, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Hikolay, Нет. Либо создать новый файл в который поместить только нужные числа.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Hikolay
Дата 29.5.2009, 06:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Понял. Спасибо за помощь.
PM MAIL   Вверх
andrew_121
Дата 29.5.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Hikolay, Если вопрос решен, отметьте тему закрытой.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Hikolay
Дата 30.5.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Почти компилятор ругается, что не знает _get_osf_handle. Чего-то описание этой функции найти не могу? И если можно примерчик сделать простенький?
PM MAIL   Вверх
andrew_121
Дата 30.5.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Hikolay, Простите, ошибся. Функция зовется _get_osfhandle()
Почитать про нее можно тут: http://msdn.microsoft.com/en-us/library/ks2530z6.aspx


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Hikolay
Дата 17.6.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 10.11.2007

Репутация: нет
Всего: нет



Благодарю, все решил
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.