if ( fread(file, 1, szfile, fp) != szfile) goto error;
Здесь по логике твоего кода, нужно освободить память и вернуть какой-нибудь NULL(т.к. во-первых там ошибка а не конец файла, а во-вторых мы не добавили нуль в конец и вызвавший эту функцию не знает размер буфера). Исправь это сохраняя обработку ошибок метками. Многие вопросы по Windows отпадут, если посмотреть тут
Нохчи, Это твое дело как ее обработать, можно так:
Если fread не бросает ошибку - значит мы достигли конец файла, иначе конец файла не был достигнут или был достигнут преждевременно, что и вызовет очищение буфера и возврат нулевого указателя.
В моем случае если fread бросает ошибку, проверяем был ли достигнут конец файла, если нет, то очищаем указатель, в другом случае поступаем по обычной схеме, и да, для такого случая нужно очищать выделенную память функцией memset при выделении памяти.
Код
if ( fread(file, 1, szfile, fp) != szfile ) { // Если была ошибка при чтении файла. if( !feof(fp) ) { free(file); file = NULL; goto error; } }
В этом программе DEV-C++ можно сделать игру и запустить и играть? (то есть можно писать исходной код и компилириовать?)
Добавлено (07.06.2013, 12:48) --------------------------------------------- Если ответ да то пишите исходной код простой игры который можно компилировать в DEV-C и скажите путь как его компилировать ? Пожалуйста
Хочу стать профессиональным программистом! У меня есть терпение, ум.
Здравствуйте, вот не знаю что учить, хочу создать змейку c++, но не знаю как сделать взаимодействие с программой не останавливая при этом работу самой программы. Что можете подсказать?
E][pert, Ну чтото типо этого, но чтобы можно было захватывать нажатие клавиш не останавливая цикл. Я могу сделать змейку, но она будет передвигаться только когда нажимаете клавишу, ну а мне нужно чтобы она сама двигалась и реагировал на нажатие
pelmenka, Ну я же обьясняю, я не знаю как это сделать без прерывания цикла, я могу сделать только так, например нажимаю вправо, он передвигается на один пункт и цикл останавливается(ждет нажатие клавиши), снова нажимаю направление, он снова передвигается на один пункт, тоесть между каждым шагом змейка останавливается и ждет нажатие клавиши, а как сделать чтобы не нужно было тормозить цикл, что для этого нужно?
Сообщение отредактировал maXimBestUA - Вторник, 11 Июня 2013, 00:45
void DrawToCursor( int x, int y, char symbol ) { COORD pos = { x, y }; SetConsoleCursorPosition(GetStdHandle( STD_OUTPUT_HANDLE ), pos); printf("%c\n", symbol); }
struct Snake { Snake(int _x, int _y, int _d) : x(_x), y(_y), dir(_d) {}
int x, y; int dir; };
enum direction { DIR_UP, DIR_RIGHT, DIR_DOWN, DIR_LEFT, };
int main() { Snake *s = new Snake(10, 10, DIR_UP);
// Main Loop. while ( true ) { // Управление. if (KeyState(VK_DOWN)) s->dir = DIR_DOWN; if (KeyState(VK_UP)) s->dir = DIR_UP; if (KeyState(VK_RIGHT)) s->dir = DIR_RIGHT; if (KeyState(VK_LEFT)) s->dir = DIR_LEFT;