如何使用C从.txt文件的特定点读取整数?

时间:2018-12-30 21:32:00

标签: c file

我需要使用C语言实现游戏,该游戏的功能是使玩家能够保存游戏以便以后玩。 要求是以以下方式将游戏数据保存在.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的卡(名为John)存储在结构玩家[0] .cards [7]中。 .txt文件。 如何将播放器1(John)的名称保存到播放器[0] .name中,然后将第二个播放器(BOT1)的名称保存到播放器[1] .name中。

几天来我一直在尝试解决这个问题,但是我没有成功。有人可以帮助我了解如何将.txt文件上特定位置的特定数字/字符串存储回我的代码中吗?如何使我的代码读取数字,例如12,32,44,43并将其存储在适当的数组中。如何使代码使用所有行(“:”,“;”)浏览文件和“,”。

我不要求解决方案。我只是希望有人能启发我的头脑,以便我找到执行此操作的正确方法。欢迎任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:0)

假设您使用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