我正在编写“Rock,Papers and Scissors”计划。当玩家输掉或赢得比赛时,它会跟踪玩家的得分并将其保存到磁盘。但我不知道为什么,程序运行,没有构建错误或警告,但每当分数改变时,程序崩溃并返回255.
// Pedra, papel e tesoura
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
void showRes(int cho1);
int scorei;
char score[128];
int main()
{
int ctemp,done;
char cho1;
FILE *sco;
sco = fopen("score.txt","r");
if(sco == NULL)
scorei = 0;
else
{
fread(score,128,1,sco);
scorei = atoi(score);
}
fclose(sco);
sco = fopen("score.txt","w");
srand((unsigned)time(NULL));
done = 0;
printf("Pedra, Papel e Tesoura\n");
do
{
printf("\n Score: %08d\n",scorei);
printf("\nDigite '1' para 'Pedra', '2' para 'Papel', '3' para 'Tesoura' ou 'Q' para sair: ");
cho1 = toupper(getchar());
fflush(stdin);
ctemp = cho1;
switch(ctemp)
{
case 49:
case 50:
case 51:
showRes(ctemp);
break;
case 81:
done = 1;
break;
default:
printf("Escolha Inv%clida!\n",160);
break;
}
fwrite(scorei,sizeof(int),1,sco);
printf("\nsalvo com sucesso\n\n");
}
while(!done);
fclose(sco);
return(0);
}
void showRes(int cho)
{
int ia;
ia = rand() % 3 + 1;
if(cho == 49)
{
printf("Voc%c escolheu Pedra!\n",136);
switch(ia)
{
case 1:
printf("O Computador escolheu Pedra!\n");
printf("Empate!");
break;
case 2:
printf("O Computador escolheu Papel!\n");
printf("Voc%c perdeu!",136);
scorei -= 100;
break;
case 3:
printf("O Computador escolheu Tesoura!\n");
printf("Voc%c venceu!\n",136);
scorei += 100;
break;
default:
break;
}
}
if(cho == 50)
{
printf("Voc%c escolheu Papel!\n",136);
switch(ia)
{
case 1:
printf("O Computador escolheu Pedra!\n");
printf("Voc%c venceu!\n",136);
scorei += 100;
break;
case 2:
printf("O Computador escolheu Papel!\n");
printf("Empate!\n");
break;
case 3:
printf("O Computador escolheu Tesoura!\n");
printf("Voc%c perdeu!\n",136);
scorei -= 100;
break;
default:
break;
}
}
if(cho == 51)
{
printf("Voc%c escolheu Tesoura!\n",136);
switch(ia)
{
case 1:
printf("O Computador escolheu pedra!\n");
printf("Voc%c perdeu!\n",136);
scorei -= 100;
break;
case 2:
printf("O Computador escolheu Papel!\n");
printf("Voc%c venceu!\n",136);
scorei += 100;
break;
case 3:
printf("O Computador escolheu Tesoura!\n");
printf("Empate!\n");
default:
break;
}
}
}
答案 0 :(得分:0)
不一定是崩溃的原因,但是您正在读取文件,就好像它包含文本,但是将二进制值写入其中。此外,连续值正在添加到文件中,但您只能读取1个。