Chào mọi người. Mình đang làm cái game nho nhỏ trong tập tài liệu tự học ở trên diễn đàn. Nó như này :
Mình tạo 1 file text danh sách từ bí mật và chọn random. Nói chung code chạy ok. Sau đó mình tạo thêm 1 file text khác chứa những gợi ý tương ứng cho các từ bí mật và rút gọn code, tạo thêm các function con để cải tiến game, lúc này thì code chạy sai. Mình chạy debug thì nó sai từ đoạn này :
FILE *taptin = NULL;
FILE *goi_y = NULL;
goi_y = fopen("GoiY_Nguoitreoco.txt","r+");
taptin = fopen("Nguoitreoco.txt","r+");
int dem_Tu = 0,so_batky = 0;
dem_Tu = dem_tu_bitmat(taptin);
srand(time(NULL));
so_batky = (rand() % (dem_Tu - min +1)) + min;
char *Chu_bimat = NULL;
char *an_chu_bimat = NULL;
char *Goiy_tubimat = NULL;
long dodai = 0;
if(taptin != NULL)
{
Chu_bimat = chon_tu_bimat(taptin,so_batky);
printf("%s\n",Chu_bimat);
dodai = strlen(Chu_bimat);
Goiy_tubimat = goiy_tubimat(goi_y,so_batky);
}
// Sau khi tao duoc chu bi mat. Ẩn chữ đó bằng các dấu *
an_chu_bimat = anChu_bimat(dodai);
Các function con như này :
char nhap_kytu()
{
char kytu = 0;
do
{
kytu = toupper(getchar());
}
while(getchar() != '\n');
return kytu;
}
int dem_chu(char taptin1[], char chu_cai)
{
int i = 0, dem = 0;
do
{
if(chu_cai == taptin1[i])
dem++;
i++;
}
while(taptin1[i] != '\0');
return dem;
}
int dem_tu_bitmat(FILE *taptin2)
{
int dem_tu = 0, c = 0;
do
{
c = fgetc(taptin2);
if(c == '\n')
dem_tu++;
}
while(c != EOF);
return dem_tu;
}
char *chon_tu_bimat(FILE *taptin3, int so_batky1)
{
char *pointer = NULL;
char chu_bimat[SO_KYTUMAX] = "";
rewind(taptin3);
for(int k = 1; k <= so_batky1; k++)
fgets(chu_bimat,SO_KYTUMAX,taptin3);
pointer = &chu_bimat[0];
return pointer;
}
char *goiy_tubimat(FILE *taptin4, int so_batky2)
{
char *pointer1 = NULL;
char goiy[SO_KYTUMAX] = "";
rewind(taptin4);
for(int h = 1; h <= so_batky2; h++)
fgets(goiy,SO_KYTUMAX,taptin4);
pointer1 = &goiy[0];
return pointer1;
}
char *anChu_bimat(int dodai1)
{
char *pointer2 = NULL;
char *anChu_Bimat = NULL;
anChu_Bimat = malloc(dodai1*sizeof(int));
int i = 0;
for (i = 0; i < dodai1 - 1; i++)
anChu_Bimat[i] = '*';
anChu_Bimat[i] = 0;
pointer2 = &anChu_Bimat[0];
return pointer2;
+) Bước tạo từ bí mật vẫn ok :
+) Tới bước lấy ra câu gợi ý thì nó bị như này :
+) Và tới bước ẩn thì bị như này :
Không hiểu sao tất cả lại ghi đè lên nhau như vậy. Mọi người chỉ giúp. Mình cảm ơn!
P/S : Mình có nên up cả 2 cái file text và full code lên không nhỉ? Liệu có cần thiết ko?