Создайте структуру комнат, каждая из которых будет записана в свой уникальный файл - PullRequest
0 голосов
/ 05 февраля 2020

Чтобы расширить заголовок, я создаю набор комнат, используя структуры, и функция по существу должна генерировать случайным образом до 7 комнат (из 10), в то время как начальная и конечная комнаты генерируются каждый раз. Затем я пытаюсь сгенерировать файл для каждой структуры помещения и отображать их PID, чтобы затем открыть каждый каталог для записи или создания этого файла. Итак, я генерирую структуру следующим образом:

struct room
{
    int id;
    char* name;
    int numOutboundConnections;
    struct room* outboundConnections[6];
};

и

int main(int argc, char* argv[])
{
    struct room Room1;
    Room1.id = 0;
    Room1.name = calloc(16, sizeof(char));
    strcpy(Room1.name, "Forest");

Тогда это моя попытка создать каталог и создать его в первичном каталоге:

// Generate the "rooms" directory name
sprintf(dirname, "./browninz.room.%d", getpid());

// Generate the room names concatenated with the directory name
sprintf(dir0, "%s/Room1", dirname);
sprintf(dir1, "%s/Room2", dirname);
sprintf(dir2, "%s/Room3", dirname);
sprintf(dir3, "%s/Room4", dirname);
sprintf(dir4, "%s/Room5", dirname);
sprintf(dir5, "%s/Room6", dirname);
sprintf(dir6, "%s/Room7", dirname);


mkdir(dirname, 0777);

// Now opening the room files/directories to create or write them in the folder.
FILE *Room1 = fopen(dir0, "w+");
FILE *Room2 = fopen(dir1, "w+");
FILE *Room3 = fopen(dir2, "w+");
FILE *Room4 = fopen(dir3, "w+");
FILE *Room5 = fopen(dir4, "w+");
FILE *Room6 = fopen(dir5, "w+");
FILE *Room7 = fopen(dir6, "w+");

, что приводит к этой ошибке для всех структур комнаты:

In function ‘main’:
    browninz.buildrooms.c:102:11: error: conflicting types for ‘Room1’
         FILE *Room1 = fopen(dir0, "w+");
               ^

Буду признателен за любые рекомендации, поскольку я относительно новичок в программировании в C и не могу понять это.

1 Ответ

0 голосов
/ 05 февраля 2020

Вы уже объявили Room1 как struct room, вы не можете re - объявить его как FILE *.

Я все еще точно не уверен то, что вы пытаетесь выполнить sh, но, возможно, добавление FILE * к структуре комнаты может быть тем, к чему вы стремитесь:

struct room
{
    int id;
    char* name;
    int numOutboundConnections;
    struct room* outboundConnections[6];
    FILE *file;
};
...
Room1.file = fopen( dir0, "w+" );

Конечно, вам нужно помнить fclose( Room1.file ) когда вы закончите с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...