BeaRLibHS - рейтинг очков

Форум библиотеки BeaRLib

Модератор: Apromix

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

BeaRLibHS - рейтинг очков

Сообщение Apromix » 24 сен 2011, 04:54

Библиотека рейтинга highscores BeaRLibHS.dll :)

Загрузить

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 24 сен 2011, 14:10

Ну если никто не против, возьму её на себя.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BeaRLibHS

Сообщение Apromix » 24 сен 2011, 14:25

Все будут только за :lol:

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 24 сен 2011, 19:29

Итак, вроде готово. Пока есть четыре метода - сохранение/загрузка в/из указанного файла, вставка сразу в нужное место списка (пока только по очкам) и получение энной структуры, которая определена как

Код: Выделить всё

struct Record
{
	char heroName[40];
	long int score;
	rec *next;
};
Все операции производятся с использованием указателя на голову списка, в ней, кстати, в поле score, определено количество элементов. Пример простенькой программы:

Код: Выделить всё

#pragma comment (lib, "BeaRLibHS.lib")
#include <stdio.h>
#include "BeaRHS.h"

int main()
{
	rec *scores = Scores::loadFromFile("C:\\scores.txt");
	rec *now=scores;
	rec tmp={"qwerty", 110, NULL};
	Scores::insToList(scores, tmp);
	printf ("%s", Scores::getByNumber(scores, 3)->heroName);
	Scores::saveToFile("C:\\scores.txt", scores);
	return 0;
}
Скрытый текст: ПОКАЗАТЬ
Кстати, стыдно признаться, сначала я пытался реализовать всё это через статический массив :oops:
Вложения
BeaRLibHS.7z
Внутри сама либа и исходники.
(5.09 КБ) 224 скачивания
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BeaRLibHS

Сообщение Apromix » 24 сен 2011, 19:36

Супер :) Радует размер либы :) Только нужна еще скомпилированная тестовая прога с исходниками, чтобы либу потестить :)

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 24 сен 2011, 20:23

Походу сделаю демку завтра, спать хочется, а тут ещё глупейший баг - файл существовать должен.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 25 сен 2011, 11:22

Может кто подскажет, что за незадача?

Код: Выделить всё

	FILE *f;
	fopen_s(&f, "C:\\scores.txt", "w");
fopen возвращает нулевой указатель, хотя файл существует и доступен.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
Cfyz
Сообщения: 776
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

Re: BeaRLibHS

Сообщение Cfyz » 25 сен 2011, 12:04

Феникс писал(а):fopen возвращает нулевой указатель, хотя файл существует и доступен.
MSDN писал(а):Return value: zero if successful; an error code on failure.
Вы уверены, что эта функция (fopen_s) должна возвращать указатель?

P. S. Дача, телефон, GPRS. Ох, ё...
Пытается раскуклиться

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 25 сен 2011, 12:15

Ну да, не так выразился. Она записывает в f нулевой указатель.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BeaRLibHS

Сообщение Apromix » 29 сен 2011, 06:47

Ну как там? Все разрешилось?

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 29 сен 2011, 09:47

Да нет, так всё и осталось. Ума не приложу, почему так происходит.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BeaRLibHS

Сообщение Apromix » 29 сен 2011, 09:58

Ну может там можно решить проблему каким-нибудь другим обходным путем?

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 01 окт 2011, 09:45

В чём проблема я так и не понял, всю голову уже сломал. На этой неделе я уезжаю, так что доделать либу смогу только по возвращении.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

Re: BeaRLibHS

Сообщение Apromix » 01 окт 2011, 11:15

Феникc писал(а):В чём проблема я так и не понял, всю голову уже сломал. На этой неделе я уезжаю, так что доделать либу смогу только по возвращении.
Время не главное, главное - доделать...

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

Re: BeaRLibHS

Сообщение Феникc » 10 окт 2011, 20:36

Итак, теперь тестовая программа работает как надо.
Скрытый текст: ПОКАЗАТЬ

Код: Выделить всё

#pragma comment (lib, "BeaRLibHS.lib")
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "BeaRHS.h"

int main()
{
	rec *scores;
	char *path="scores";
	while (1)
	{
		scores = Scores::loadFromFile(path);
		rec tmp={"qwerty", 110, NULL}; //временная структура
		scanf("%s %d", &tmp.heroName, &tmp.score);
		Scores::insToList(scores, tmp);
		system("cls");
		for (int i=0; i<scores->score; i++)
		{
			printf ("%d %s %d\n", i+1, Scores::getByNumber(scores, i)->heroName, Scores::getByNumber(scores, i)->score);
		}
		printf("\n");
		Scores::saveToFile(path, scores);
	}
	return 0;
}
rec определён как

Код: Выделить всё

struct Record
{
	char heroName[40];
	long int score;
	rec *next;
};
UPD: Ах ты ж блин, какая глупая ошибка. Вместо break у меня стоял return и в итоге fclose не вызывался. АРГХХХ.. Копипаст это зло. Последняя версия библиотеки в архиве, вместе с программой-тестом.

UPD2: Сделал шифрование, обновил пример и архив. Теперь имя файла надо передавать без разрешения. Создаёт зашифрованый файл .rec в который посимвольно записывает инвертированные чары (255-char)
Вложения
Release.zip
(8.74 КБ) 209 скачиваний
Всё вышесказанное - ИМХО, если не указано обратное.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей