Как читать целые числа из определенной точки файла .txt, используя C? - PullRequest
0 голосов
/ 31 декабря 2018

Мне нужно реализовать игру на языке Си, где функциональность позволяет игроку сохранить игру, чтобы играть позже.Требуется сохранить данные игры в файле .txt следующим образом: 1) количество игроков в первом ряду;2) карты на столе во втором ряду, идентифицированные игроком 0 и существующими картами.3) следующая информация для каждого игрока: номер игрока, если он реальный игрок или бот (1, если это бот, 0, если он реальный), имя игрока, очки и карты в руке.Ниже приведен пример того, как мне нужно хранить данные в файле .txt:

2\n
0:T;23,43,45\n
1:0;John;23:12,32,44,43\n
2:1;BOT1;34:43,54,53,45\n
EOF

Теперь у меня нет представления о том, как хранить, например, карты игрока.1 (по имени Джон) в структуре player [0] .cards [7], когда игрок загружает игру после этого .txt файла.Как я могу сохранить имя игрока 1 (Джон) в player [0] .name, а затем сохранить имя второго игрока (BOT1) в player [1] .name.

Я пытался решить эту проблему в течение нескольких дней, но я не добился успеха.Может ли кто-нибудь помочь мне понять, как сохранить определенное число / строку из определенной позиции в файле .txt обратно в мой код?Как я могу заставить свой код читать числа, например 12,32,44,43, и сохранять его в правильном массиве.Как я могу заставить свой код перемещаться по файлу со всеми строками, ":", ";"а также ",".

Я не прошу решения.Я просто хочу, чтобы кто-то осветил мой разум, чтобы я мог найти правильный способ сделать это.Любая помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 31 декабря 2018

Предположим, что вы используете fgets для чтения файла построчно;Затем вы можете разобрать каждую строку и каждую часть такой строки отдельно.Что касается списка чисел, вы можете использовать strrchr, чтобы найти позицию последнего двоеточия, а затем использовать strtok, чтобы разделить запятые значения по одному.Надеюсь, это поможет.

int main() {

    char aSingleLine[] = "1:0;John;23:12,32,44,43\n";
    char* lastColon = strrchr(aSingleLine,':');
    if (lastColon) {
        char* numbers = lastColon+1; // one after the last colon;
        int i=0;
        char *numStr = strtok(numbers,",");
        while(numStr != NULL) {
            int numVal;
            if (sscanf(numStr,"%d",&numVal)==1) {
                printf("%dth value: %d\n", i, numVal);
            }
            else {
                printf("invalid number: %s",numStr);
            }
            i++;
            numStr = strtok(NULL,",");
        }
    }
}

Вывод:

0th value: 12
1th value: 32
2th value: 44
3th value: 43
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...