我需要为我正在制作的游戏验证加载文件,我遇到了麻烦:
我只需要知道第一个字符是否是某个范围内的int,如果下一个字符是unsigned short int(检查每个字符的类型和值),我找不到这个函数.
另外,我需要检查第n个字符是否是文件中的最后一个字符(如果不是则返回一些错误代码).
该文件是二进制类型.
我怎么能解决这个问题?
谢谢!
E:
这是我的加载文件功能:
Cod_Error load(Info * gameInfo)
{
FILE * loadFile;
unsigned short int dif;
int i;
randomizeSeed();
gameInfo ->undo = FALSE;
loadFile = fopen(gameInfo->fileArchivo, "rb");
fread(&dif, sizeof(dif), 1, loadFile);
gameInfo->size = sizeFromDif(dif);
gameInfo->undoPossible = FALSE;
gameInfo->board = newBoard(gameInfo->size);
if(gameInfo->board == NULL)
return ERROR_MEM;
fread(&(gameInfo->score), sizeof(Score), 1, loadFile);
fread(&(gameInfo->undos), sizeof(unsigned short int), 1, loadFile);
for(i = 0; i < gameInfo->size; i++)
fread(gameInfo->board[i], sizeof(Tile), gameInfo->size, loadFile);
fclose(loadFile);
return OK;
}
Run Code Online (Sandbox Code Playgroud) 我试图理解GHCi打印值的作用,我认为它会像调用putStrLn . show值那样做,但后来发生了这样的事情:
a = return 5 :: (Monad m, Num a) => m a
a -- prints 5
b = return 5 :: (Monad m, Num a, Show (m a)) => m a
b -- Ambiguous type variable `m0`...
Run Code Online (Sandbox Code Playgroud)
为什么添加show约束会改变这种行为?我认为在尝试打印价值时会假设.
char *p[2][3];
怎么*(*(p+1)+1)[7]平等p[1][8][0]?
我以为*(*(p+1)+1)[7]会是一样的*(*(*(p+1)+1)+7),那就等于p[1][1][7],我哪里错了?
E:我不明白为什么这会被贬低......
假设我有一些代码,我想最大限度地优化它,无视可读性,可维护性等.
为此目的,无论如何要确定每个基本动作花费多少时间?我想这可能与CPU有关,但我不确定.
我的意思是像骑自行车for,分配a=24,数学运算2+25等等.
假设我有一些功能function,以下原型在所有意义上完全相同吗?
sometype function(sometype2 arr[],...);
sometype function(sometype2 * arr,...,);
Run Code Online (Sandbox Code Playgroud)
我认为他们是,但我的教授从未真正解释过.
如何释放a char*后使用的所有内存不再有用?
我有一些 struct
struct information
{
/* code */
char * fileName;
}
Run Code Online (Sandbox Code Playgroud)
我显然要在其中保存一个文件名char*,但在使用一段时间之后,我想释放以前的内存,我该怎么做?
E:我并不是要释放指针,而是指向的空间fileName,这很可能是一个字符串文字.