Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 23.08.2007, 16:16   #16
Alex_90
Знающий
 
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение
(для 2 участников)
Re: Алгоритм игры Lines

ОРИЕНТИРОВАНИЕ В ТЕКСТОВОМ ФАЙЛЕ
Всем привет.
В любой программе часто возникает необходимость сохранять информацию на длительное время, что бы ее можно было воспроизвести при следующем запуске программы. Единственнымм способом сделать это является запись этой информации в файл. Но держать для каждой записи отдельный файл очень нерационально и для конечного пользователя и для программиста, который может просто запутаться, в каком файле что лежит.
Гораздо более рационально использовать один-два файла и в них хранить сразу много записей.
Информации записать в один файл можно сколько угодно много (до 32мб), а вот считать гораздо сожнее:
в паскале был отличный метод ориентирования в файле
Seek (f:file,pozitsia:integer);
Есть аналогичный метод и в С++, но там у функции fseek сразу три параметра: file,long,int.
C первым вопроса нет - это указатель на файл, в котором ориентироваться, а вот что такое второй и третий - не знаю (fseek не документирована ни в одной книге по С++, так как унаследована от С).
Может кто знает, как с попощью этой или какой нибудь другой функции ориентироваться в файле?
Функция fseek находится в файле stdio.h.
(Offline)
 
Ответить с цитированием
Старый 23.08.2007, 16:37   #17
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Алгоритм игры Lines

по логике - это направление смещения ( от текущей позиции, начала или конца). Такие задчи я решаю при помощие fstream-класса. Показать?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.08.2007, 16:49   #18
jimon
 
Сообщений: n/a
Re: Алгоритм игры Lines

вводим в гугл "fseek c++" и читаем мануал :
http://www.cplusplus.com/reference/c...dio/fseek.html
 
Ответить с цитированием
Старый 23.08.2007, 17:57   #19
Alex_90
Знающий
 
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение
(для 2 участников)
Re: Алгоритм игры Lines

по логике - это направление смещения ( от текущей позиции, начала или конца). Такие задчи я решаю при помощие fstream-класса. Показать?
Если можно, то да, потому что моя конструкция
Spisok_control.ResetContent ();
//Выводим в список все имена пользователей из расчета одна строка
//в файле - один пользователь
FILE *f_user;
char* FileNameUser="Users.lin";
char load_string [50] = "none";
f_user=fopen (FileNameUser,"r");
long st=0;
while (!feof(f_user))
{
fseek (f_user,st,SEEK_SET);
fgets( load_string, 50 , f_user);
Spisok_control.AddString (load_string);
st++;
}
fclose (f_user);
добавляет все элементы в одну строку списка, а не каждый элемент в свою.
(Offline)
 
Ответить с цитированием
Старый 23.08.2007, 18:17   #20
jimon
 
Сообщений: n/a
Re: Алгоритм игры Lines

Alex_90
если у тебя строчки по 50 символов то
st+=50 попробуй
 
Ответить с цитированием
Старый 23.08.2007, 22:10   #21
Alex_90
Знающий
 
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение
(для 2 участников)
Re: Алгоритм игры Lines

Alex_90
если у тебя строчки по 50 символов то
st+=50 попробуй

Проверил->Ни какого результата.
Все равно он все строчки в одну считывает.Ведь у меня строчки с именами игроков могут быть от 1 до 50 символов, причем, если строчка меньше 50 символов, то до 50 я добавляю пробелами:
//Теперь надо дабавть нового игрока в список игроков и соддать
//для него список его рекордов
FILE *f_user,*f_records;
char* FileNameUser="Users.lin";
//char* FileNameRecords=Add_text+".lin";
f_user=fopen (FileNameUser,"a");
//f_records=fopen (FileNameRecords,"w");
//Файл рекордов создан и открыт, но записывать туда будет другая
//программа, поэтому сразу этот файл ззакрываем
//fclose (f_records);
fputs (Add_text,f_user);
//Дополняем строку пробелами до 50 символов
int pr;
pr=50-Add_text.GetLength ();
for (int i=1;i==pr;i++)
{
fputs (".",f_user);
}
fclose (f_user);
Однако толи он пробелы не добавляет, толи не считывает, но все равно следующие строчки он приплюсовывает к предыдущей. Пробывал даже вместо пробелов точки добавлять->все равно их не видно.
(Offline)
 
Ответить с цитированием
Старый 23.08.2007, 22:56   #22
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Алгоритм игры Lines

#include<fstream.h>
#include<iostream.h>
#include<conio.h>


void main(){
fstream file;
file.open("score.txt",ios::in|ios::nocreate);
if(!file.is_open()){
cout<<"cannot open!"<<endl;
getch();
return;
}
char load_string [50];
while(!file.eof()){
file>>load_string;
cout<<load_string<<endl;
}
file.close();
getch();
}
как-то так
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 23.08.2007, 23:30   #23
Alex_90
Знающий
 
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение
(для 2 участников)
Re: Алгоритм игры Lines

А возможно как-то наладить считывание так, что бы он считывал по принципу:
одна строчка в файле - один пункт в списке?
(Offline)
 
Ответить с цитированием
Старый 23.08.2007, 23:42   #24
Magus
Бывалый
 
Регистрация: 05.09.2005
Сообщений: 823
Написано 101 полезных сообщений
(для 205 пользователей)
Re: Алгоритм игры Lines

Возможно. Есть такая функция - EOL(FILE*)
Возвращает true, если ты дошел до конца строки.
Насчет типа параметра не уверен, уточни.
(Offline)
 
Ответить с цитированием
Старый 24.08.2007, 00:33   #25
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Алгоритм игры Lines

Сообщение от Alex_90
А возможно как-то наладить считывание так, что бы он считывал по принципу:
одна строчка в файле - один пункт в списке?
именно это мой пример и делает
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 24.08.2007, 23:46   #26
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Алгоритм игры Lines

Сообщение от Alex_90
Вот интересная фигня получается:

Построчное считывание fstream работает и вполне нC
ась?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 25.08.2007, 20:03   #27
Alex_90
Знающий
 
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение
(для 2 участников)
Re: Алгоритм игры Lines

В MFC незльзя создать переменную для текстового поля типа char*, который требуется для записи в файл функцией f_user.put (char*)
Придется переводить полученное из поля ввода значение типа CString в char*, но как?
Наверно, для этого есть какая-нибудь функция?
(Offline)
 
Ответить с цитированием
Старый 25.08.2007, 20:37   #28
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Алгоритм игры Lines

Сообщение от Alex_90
В MFC незльзя создать переменную для текстового поля типа char*, который требуется для записи в файл функцией f_user.put (char*)
Придется переводить полученное из поля ввода значение типа CString в char*, но как?
Наверно, для этого есть какая-нибудь функция?
Брехня! Нормально char работает. Покажи код.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 25.08.2007, 20:53   #29
Alex_90
Знающий
 
Регистрация: 05.02.2007
Сообщений: 201
Написано одно полезное сообщение
(для 2 участников)
Re: Алгоритм игры Lines

void Add_user::OnAdd()
{
UpdateData (true);
if (Add_text.GetLength ()>50)
{
AfxMessageBox ("Такое имя без поллитра не прочтешь, а если и прочтешь, то я язык сломаешь! Введите имя не более 50 символов в длину.",MB_OK+MB_ICONEXCLAMATION,0);
}
if (Add_text.GetLength()!=0&&Add_text.GetLength ()<=50)
{
// TODO: Add your control notification handler code here
//Теперь надо дабавть нового игрока в список игроков и соддать
//для него список его рекордов
fstream f_user,f_records;
f_user.open ("Users.lin",ios::in);
f_user.put (Add_text);//Ошибка выдается здесь
f_user.close ();
CDialog::OnOK();
}
if (Add_text.GetLength ()==0)
{
AfxMessageBox ("Инкогнитые из Питербурга к игре не допускаются! Все таки имя ввсести придется!",MB_OK+MB_ICONEXCLAMATION,0);
}
}
Перменная Add_text связанна с полем ввода и имеет тип CString.
Ошибка, которую выдает Visual Studio:
C:\Мои документы\Программирование\Visual C++\OpenGL\User\Add_user.cpp(61) : error C2664: 'class ostream &__thiscall ostream::put(char)' : cannot convert parameter 1 from 'class CString' to 'char'
(Offline)
 
Ответить с цитированием
Старый 25.08.2007, 20:58   #30
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Алгоритм игры Lines

В MFC незльзя создать переменную для текстового поля типа char*
можно
--------------------
MB_OK+MB_ICONEXCLAMATION
MB_OK|MB_ICONEXCLAMATION
-------------------
(LPTSTR)(LPCTSTR)Add_text юзай если уж так хочешь через CString
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм MD5 Dialogus Библиотеки 7 07.02.2010 15:17
Алгоритм Дейкстры Serega 3D-программирование 6 29.10.2009 20:18
Алгоритм темы на нокиа demon112 Алгоритмика 7 22.05.2009 01:24
Морской бой - алгоритм Matt Merkulov 2D-программирование 3 27.05.2007 00:25
Алгоритм поворота alcosholik Алгоритмика 8 08.09.2005 21:05


Часовой пояс GMT +4, время: 16:50.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com