我正在为我的编程课做一个简单的游戏。而且我将播放保存为二进制文件时遇到问题,它只写入坐标字母。
int number只是一个从6到8的数字。 char letter只是A到J的一个字母。
我希望坐标显示在文件上,如A1 ...
有人知道如何解决这个问题吗?
这是功能:
void makeLoad(FILE *f,char letter, int number){
f = fopen("save.dat", "a+");
if( f==NULL ) {
printf("Erro no acesso ao ficheiro\n");
return ; }
printf("%c\n", letter );//debug purposes
printf("%d\n", number );//debug purposes
fwrite(&letter,sizeof(letter),1,f);
fwrite(&number,sizeof(number),1,f);
fclose(f);
}
我期待最后有一系列像A1B3C5这样的戏剧 但是我只得到ABC ......数字之间缺少
如果需要,这是完整的文件:http://pastebin.com/WzynZuaC
答案 0 :(得分:0)
只要数字只有一个数字,这里就可以快速修复它:
char c = '0' + number;
fwrite(&c,sizeof(c),1,f);
您正在做的是将int的二进制表示写入文件,这与ASCII表示不同。例如,字符'6'的二进制表示为00110110,而int 6的二进制表示为00000000000000000000000000000110。当您要编写前者时,您将后者写入文件。将“0”添加到数字会添加00110000,这会在隐式强制转换为字符后提供正确的二进制值。
修复代码的更简洁方法是使用单个fprintf调用替换fwrite调用,这样可以完成所有工作:
fprintf(f, "%c%d", letter, number);