Страница 1 из 2

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

Добавлено: 24 сен 2011, 04:54
Apromix
Библиотека рейтинга highscores BeaRLibHS.dll :)

Загрузить

Re: BeaRLibHS

Добавлено: 24 сен 2011, 14:10
Феникc
Ну если никто не против, возьму её на себя.

Re: BeaRLibHS

Добавлено: 24 сен 2011, 14:25
Apromix
Все будут только за :lol:

Re: BeaRLibHS

Добавлено: 24 сен 2011, 19:29
Феникc
Итак, вроде готово. Пока есть четыре метода - сохранение/загрузка в/из указанного файла, вставка сразу в нужное место списка (пока только по очкам) и получение энной структуры, которая определена как

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

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:

Re: BeaRLibHS

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

Re: BeaRLibHS

Добавлено: 24 сен 2011, 20:23
Феникc
Походу сделаю демку завтра, спать хочется, а тут ещё глупейший баг - файл существовать должен.

Re: BeaRLibHS

Добавлено: 25 сен 2011, 11:22
Феникc
Может кто подскажет, что за незадача?

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

	FILE *f;
	fopen_s(&f, "C:\\scores.txt", "w");
fopen возвращает нулевой указатель, хотя файл существует и доступен.

Re: BeaRLibHS

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

P. S. Дача, телефон, GPRS. Ох, ё...

Re: BeaRLibHS

Добавлено: 25 сен 2011, 12:15
Феникc
Ну да, не так выразился. Она записывает в f нулевой указатель.

Re: BeaRLibHS

Добавлено: 29 сен 2011, 06:47
Apromix
Ну как там? Все разрешилось?

Re: BeaRLibHS

Добавлено: 29 сен 2011, 09:47
Феникc
Да нет, так всё и осталось. Ума не приложу, почему так происходит.

Re: BeaRLibHS

Добавлено: 29 сен 2011, 09:58
Apromix
Ну может там можно решить проблему каким-нибудь другим обходным путем?

Re: BeaRLibHS

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

Re: BeaRLibHS

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

Re: BeaRLibHS

Добавлено: 10 окт 2011, 20:36
Феникc
Итак, теперь тестовая программа работает как надо.
Скрытый текст: ПОКАЗАТЬ

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

#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)