我正在通过制作一个简单的猜谜游戏来练习C编程。我在一些笔记中发现了这个问题,如下:
“编写一个播放数字猜谜游戏的应用程序:程序选择一个到一百个之间的随机数。然后用户猜出数字,程序告诉用户该数字是高于还是低于他们的猜测,直到用户猜对了。一旦用户正确猜到了数字,程序就应该告诉用户它花了多少猜测,并提供再次玩游戏。猜测成为玩家的得分。最小猜测成为最高分。 “
我编写了游戏编码,它运行正常。我创建了一个单独的函数来保存外部文件中的最高分(最少猜测)并且它可以工作。问题是它每次都会重写最高分。我想把最高分初始化为1,但猜测的数量不能少于此。注意,猜测的数量不受限制。 我该如何解决这个问题?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int readScore(void);
void saveScore(int score);
int main(){
int menu=0;
char name[16];
int counter=0;
int rand_num, score;
int guess=0;
FILE *fscore;
while(menu != 4){
printf("\n\n****** NUMBER GUESSING GAME MENU v1.0 ******\n");
printf("\t1.Create Player Name.\n\t2.Play.\n\t3.View Score.\n\t4.Quit.\n");
printf("***************************************\n");
printf("Your Choice: ");
scanf("%d", &menu);
if(menu == 1){
printf("Enter a player name: ");
scanf("%15s", name);
}
else if(menu == 2){
srand(time(NULL));
rand_num = 1 + rand()%100;
while(guess != rand_num){
printf("\nGuess the number picked: ");
scanf("%d", &guess);
if(guess > rand_num){
printf("\nNumber is smaller than your guess.");
}
else if(guess < rand_num){
printf("\nNumber is greater than your guess.");
}
counter++;
}
printf("\nYour guess is correct!!\n");
printf("Number of guesses: %d\n", counter);
if(counter < score){
saveScore(counter);
}
}
else if(menu == 3){
int score = readScore();
printf("\nThe best score is: %d\n", score);
}
}
return 0;
}
int readScore(void){
// Read the score from file
FILE *fscore = fopen("score.txt", "r");
int score=1;
fscanf(fscore, "%d", &score);
fclose(fscore);
return score;
}
void saveScore(int score){
// Save the score to file
FILE *fscore = fopen("score.txt", "w+");
fprintf(fscore, "%d", score);
fclose(fscore);
return 0;
}
答案 0 :(得分:1)
测试fopen()
FILE *fscore = fopen("score.txt", "r");
if (fscore == NULL) /* file does not exist
** no games have been played */
return -1;
然后,在主程序中,测试-1
else if(menu == 3){
int score = readScore();
if (score < 0) printf("No games have been played.\n");
else printf("\nThe best score is: %d\n", score);
}
答案 1 :(得分:0)
下面!你创建了一个变量得分,它没有定义的值,可能包含大的垃圾值让我们说 123456 !!因此 计数器总是小于得分 !!所以你的程序将保存新的高分!!
现在你的程序将运行一个新的循环!!但是在得分中仍然没有高分!因为你没有宣布得分的价值是多少!!因此,它再次使用得分作为 123456 !!即使你的新分数超过你的最后一个高分 !!它将取代你的最后一个高分 .....
这样做:
<强> 1。在运行main
时,将您的(int)分数与最后一个高分进行分配int main(){
....//all your declarations;
FILE* fscore;
fscore = fopen("score.txt", "r");
if(fscore!=NULL){
fscanf(fscore, "%d", &score);
}
else if(fscore == NULL){ //if you haven't got any score in score.txt
score = //lets_put_a_large_random_value;
}
fclose(fscore);
// Now all the remaining codes begins....
}
我还在你的程序中发现了一些小错误: -
<强>我。如果您的程序选择menu == 1,程序将在取用用户名
后终止<强> II。 void savescore(int score);不需要返回值..
<强> III。您在main()函数
中两次声明相同的 int score希望您的程序现在正常运行!!