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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Редактирование текстового файла (Borland C++ 3.1) 
V
    Опции темы
DjoNIK
Дата 5.6.2007, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



Необходимо открыть файл и занести вместо существующей строки новую, при чём может производится редактирование произвольные строки.
Мой код (при уже заполненом массиве pl) открывает файл, но изменения иногда заносит, а иногда - нет  smile .

Код

struct player
{
    char nik[35];
    float balance;
    long int seek_pos;
    int cock_num;
    float stake;
};

void ResOfStake( int win_num )
{
 FILE *inf;
 char *strf, *strd, *escape="";
 int dec, sign, ndig = 10;
 int lend, lens;
 int k, i=0;
 inf = fopen("file.dat", "r+");
 do
  {
   if( pl[i]->cock_num==win_num )
    pl[i]->balance += pl[i]->stake;
   else
    pl[i]->balance -= pl[i]->stake;
   strf=fcvt( pl[i]->balance, ndig, &dec, &sign );
   strcpy( strd, pl[i]->nik );
   strcat( strd, " " );
   strncat( strd, strf, dec );
   lend=strlen(strd);
   for(k=0; k<lens-1; k++)
    strcat( escape, " " );
   fseek( inf, pl[i]->seek_pos, SEEK_SET );
   int res=fputs( escape, inf);
   if(res==EOF)
    cout<<"ERROR E!!!";
   fseek( inf, pl[i]->seek_pos, SEEK_SET );
   res=fputs( strd, inf);
   if(res==EOF)
    cout<<"ERROR S!!!";   
   fseek( inf, pl[i]->seek_pos+lens, SEEK_SET );
   i++;
  }
 while( pl[i] );
}


Это сообщение отредактировал(а) DjoNIK - 6.6.2007, 00:36


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Nil
Дата 5.6.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

strcpy( strd, pl[i]->nik );

Эмм, а память кто выделять будет ?
PM MAIL WWW ICQ   Вверх
DjoNIK
Дата 5.6.2007, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



Цитата

Эмм, а память кто выделять будет ?


Я упоминал, что массив pl заполнен, но забыл сказать - pl это глобальный массив указателей
Код

player* pl[MAX_PLAYER];

к моменту вызова ResOfStake( int win_num ) он уже заполнен, но delete-а ещё не было


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Nil
Дата 5.6.2007, 22:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

char* strcpy(char* dest,const char* source); 

Я об этом...
strd собственно ни на что не ссылается...

PM MAIL WWW ICQ   Вверх
DjoNIK
Дата 5.6.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



smile
СПС


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
DjoNIK
Дата 5.6.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



Замечание было верным, но проблема не решена :(



--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Nil
Дата 5.6.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну давайте постепенно разбираться....
Код

 for(k=0; k<lens-1; k++)
    strcat( escape, " " );

Не увидел в предыдущем коде инициализации lens....
Код

  fseek( inf, pl[i]->seek_pos, SEEK_SET );
   int res=fputs( escape, inf);
   if(res==EOF)
    cout<<"ERROR!!!";
   fseek( inf, pl[i]->seek_pos, SEEK_SET );
   fputs( strd, inf);
   fseek( inf, pl[i]->seek_pos+lens, SEEK_SET );

Я конечно давненько такое не использовал, но... Помоему вы 2 раза пишите в одно и тоже место, а потом непонятно заем переходите в другое место в файле 0_о
PM MAIL WWW ICQ   Вверх
DjoNIK
Дата 6.6.2007, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



Цитата

Помоему вы 2 раза пишите в одно и тоже место, а потом непонятно заем переходите в другое место в файле

Так оно и есть. Я сначала пробелами заполняю исходную строку(что бы лишние символы не вылезли), потом становлюсь на то же место и записываю туда новое значение
Цитата

Не увидел в предыдущем коде инициализации lens....

Оно конечно есть, иначе нескомпилилось бы, просто не всё скопировал видимо, сей час всё поправил.

Это сообщение отредактировал(а) DjoNIK - 6.6.2007, 00:38


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Nil
Дата 6.6.2007, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Объясните толком чего хотите добиться кодом ?..
По-моему это стоит реализовывать совсем по-другому. Выглядит все по-меньшей мере странно 0_о
PM MAIL WWW ICQ   Вверх
DjoNIK
Дата 6.6.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



У меня pl - глобальная переменная. её я заполняю в одной функции, считываю в ResOfStake(...);
При чём работаю с ResOfStake(...); в цикле в соответствии с выбором пользователя:
Код

while(1)
{
 clrscr();
  ...
 cout << " ‚лЎҐаЁвҐ ¤Ґ©бвўЁҐ: ";
 cin >> choice;

 switch(choice)
 {
  case 1:
  {
   ...
   SetStake();                                  // заполняю pl
   ...
   ResOfStake( track::get_win() );  // читаю
   ...
   break;
  }
  ...
 }
}

Оказывается, что сразу после запуска программы всё работает чётко, но, выбрав ещё раз цикл заполнить-считать (при уже заполненом pl), функция ResOfStake выдает ERROR E!!!. Т. е. я уже не могу записать никакие данные в файл.
Может быть после первого прохода нужно как-то очистить этот pl?

Это сообщение отредактировал(а) DjoNIK - 6.6.2007, 00:51


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Nil
Дата 6.6.2007, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Мне сам код не нравится, но если вы говорите работает как вам требуется то следующая претензия - Не обнаружил fclose....
PM MAIL WWW ICQ   Вверх
DjoNIK
Дата 6.6.2007, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



Цитата

Мне сам код не нравится

то есть?
Цитата

Не обнаружил fclose

И с ним и без него - ни какой разницы!


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Nil
Дата 6.6.2007, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Покажите получившийся код...
PM MAIL WWW ICQ   Вверх
DjoNIK
Дата 6.6.2007, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

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



Вот вся программа

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  Piter_KP_1.5.rar 5,45 Kb


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Nil
Дата 6.6.2007, 01:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Исходник пока не смотрел, не охото рыться в чужом коде но вот только сейчас заметил что
escape - тоже используется а памяти под неё не выделено... )

PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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