Fscanf chỉ đọc %s mà không đọc được %d?

Sao nhiều người dùng *& nhỉ :? ko có *& bạn nhé

Với lại bạn làm sai rồi. Nếu ko bạn cứ dùng mảng, chứ đừng danh sách liên kết. Bạn code như vật hầu hết ai đọc vô cũng tưởng là bạn đang xài dslk hết :> Và việc cấp phát như vậy không tăng thêm phần tử của con trỏ :smile:
Nói ở trên, ko đọc hết buffer. Bạn chưa đọc 4 cái skill kia. -> 4 cái đó vẫn còn ở đó. Nên khi bạn cấp phát lại, đọc lại các biến name, type, hp, att,def … thì nó đọc theo thứ tự name, type,hp,att. name và type là 2 biến chuỗi nên ok. đọc đc chuỗi đó, nhưng HP và ATT lại là 2 biến số, nên nó ko đọc được chuỗi -> tạch
Trừ khi bạn bỏ 4 cái tên skill cuối cùng trên 1 hàng kia mà nó vẫn ko đọc đc. Lúc đó tính tiếp :>

Test ở trên file luôn và ko có lỗi ^^

3 Likes

:smiley: không hiểu nhau thì code luôn.

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define MLEN 20


typedef struct PET 
{
	char type[MLEN]; 
	char name[MLEN]; 
	int HP; 
	int attack; 
	int defense;
	int chisophu;
	int nSkill; 
	char** skill;
	PET * next;
};
typedef struct PET P;


void Capphat1(P *&DanhSach)
{
	DanhSach = (P *)malloc(sizeof(P));
}
void Capphat2(char **&Skill)
{
	Skill = (char **)calloc(4, sizeof(char));
	for( int i = 0 ; i < 4 ; i++)
		Skill[i] = (char *)calloc(19,sizeof(char));
}
void main()
{
	P *a;
	Capphat1(a);
	P *head;
	head=a;
	int i;
	int STT=0;
	FILE *DS = fopen("test.txt","rt");
	while ( !feof(DS) )
	{
		fscanf(DS , "%s ", a->name);
		fscanf(DS , "%s ", a->type);
		fscanf(DS , "%d ", &a->HP);
		fscanf(DS , "%d ", &a->attack);
		fscanf(DS , "%d ", &a->defense);
		fscanf(DS , "%d ", &a->chisophu);
		fscanf(DS , "%d ", &a->nSkill);
		Capphat2(a->skill);
		for (i=0;i<4;i++)
			fscanf(DS ,	"%s ", a->skill[i]);
		STT++;
		Capphat1(a->next);
		a=a->next;
	}
	fclose(DS);
	a=head;
	// xuat.
	while (STT!=NULL)
	{
		printf("\n%s", a->name);
		printf("\n%s", a->type);
		printf("\n%d", a->HP);
		printf("\n%d", a->attack);
		printf("\n%d", a->defense);
		printf("\n%d", a->chisophu);
		printf("\n%d", a->nSkill);
		for (i=0;i<4;i++)
			printf("\n%s ", a->skill[i]);
		STT--;
		a=a->next;
	}
	getchar();
	getchar();
}
3 Likes

Cảm ơn mọi người nhiều :smiley:

mình cũng đang tập tành DSLK :smiley: nên có chút rối nhẹ

Cảm ơn Rok_Hoàng Đã thông cho mình cái DSLK :smiley:

1 Like

@Thai_Hoc_Nguyen DNH cho phép reply nhiều người cùng một post đấy, không cần reply nhiều lần đâu. Em muốn reply cho ai, chỉ cần bôi cái đoạn muốn reply rồi bấm reply thôi.

Videos này có hướng dẫn đấy:

Còn chính xác muốn xem thì ở 5 phút 9 s có nói tới.


Topic này đã được trả lời nên anh sẽ cho nó tự động close sau 6h nữa nhé.

2 Likes

Cảm ơn anh . Phiền anh quá :smiley:

1 Like

This topic was automatically closed after 6 hours. New replies are no longer allowed.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?