我需要使用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并将其存储在适当的数组中。如何使代码使用所有行(“:”,“;”)浏览文件和“,”。
我不要求解决方案。我只是希望有人能启发我的头脑,以便我找到执行此操作的正确方法。欢迎任何帮助。 谢谢。
答案 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