30/09/2018, 16:28

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

Em viết 1 đoạn code thế này mà chả hiểu sao nó chỉ lấy %s mà ko lấy %d

P *a;
int soluongthu = 0; // bien nay tang theo cap phat
FILE *DS = fopen("DanhSachThu.txt","rt");
while ( !feof(DS) )
{
    Capphat1(a);
    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->nSkill);
    Capphat2(a->skill);
}

Không hiểu sai khúc nào luôn ?

Đây là FILE.txt

Nguyễn Minh Dũng viết 18:41 ngày 30/09/2018

Output trông như thế nào?

Thai Hoc Nguyen viết 18:36 ngày 30/09/2018

Nó chỉ nhận 2 chuỗi lúc đầu rồi các %d nó không nhận được anh. Các số đằng sau nó ko chịu nhận @@

*grab popcorn* viết 18:35 ngày 30/09/2018

chưa đọc hết buffer kìa.
4 cái skill bạn chưa đọc -> còn ở buffer lệnh đọc tiếp theo cái nó đọc name, type, hp, att thì cái hp và att nó đọc vô là chuỗi -> tạch

Thai Hoc Nguyen viết 18:32 ngày 30/09/2018

Mình không hiểu ? Bạn giải thích lại được ko?

Sao nó lại đọc vô chuỗi được bản nhỉ ? mình đọc lần lượt mà. Mình debug thử thì cái hp và attack ko nhận?

*grab popcorn* viết 18:31 ngày 30/09/2018

bạn đọc 4 cái tên skill chưa?
có 4 cái tên skill cuối cùng á.
Nếu chưa đọc thì nó còn dư âm lại 4 cái tên skill đó
-> đọc tiếp thì nó sẽ đọc 4 cái này!
Vì C là đọc hết 1 hàng thì tự động xuống hàng. Còn thì đọc khi nào hết hàng thì mới ngưng

Ở code trên mình ko thấy bạn đọc 4 cái tên skill nên nghĩ là bị lỗi do chưa đọc hết dữ liệu trên 1 hàng

Thai Hoc Nguyen viết 18:42 ngày 30/09/2018

Mấy cái skill đó mình phải đọc xong mấy cái trước thì mới đến nó ? ( Đọc HP va attack ko dc sao tới cái skill ) bạn nhỉ

*grab popcorn* viết 18:39 ngày 30/09/2018

bị lỗi ngay đọc dòng đầu luôn hay sao bạn?

Thai Hoc Nguyen viết 18:32 ngày 30/09/2018

Không CT chạy vẫn ok mà đến khúc lấy cái HP và attack thì ko hiểu sao nó ko chịu lấy

*grab popcorn* viết 18:37 ngày 30/09/2018

xin nguyên code bạn ơi Chứ code trên của bạn nhìn ko có sai.

Thai Hoc Nguyen viết 18:30 ngày 30/09/2018

Code của mình thi chắc chắn sẽ có sai nhưng mà ý của minh chỉ là đoạn trên thôi .

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Minh Hoàng viết 18:33 ngày 30/09/2018

cho xin file .txt luôn

Thai Hoc Nguyen viết 18:38 ngày 30/09/2018

gõ 1 2 dòng debug đi 1 dòng được thì tất cả đều được mà.
gõ đại test thử cũng được ?

Nguyễn Minh Dũng viết 18:28 ngày 30/09/2018

gõ 1 2 dòng debug đi 1 dòng được thì tất cả đều được mà.

  1. Phải là file txt của em đang dùng. Gõ có thể sẽ khác với file input của em.

  2. Em nhớ sử dụng markdown để post code, không cần phải post lên ideone.

  3. Ở đây là diễn đàn, em nên post 1 post đủ dài, có đầy đủ nội dung. Không nên post 1 câu rồi gửi lên, post thêm 1 câu nữa. Nó giống chat trên FB lắm.

Minh Hoàng viết 18:44 ngày 30/09/2018

Tại sao Học cấp phát (Capphat2) rồi mà không sử dụng
đọc thiếu 1 chỉ số rồi. 5 chỉ số mới tới tên skill.
Học định làm DSLK hả? sao struct không có phần liên kết, có mỗi phần nội dung không vậy?

Thai Hoc Nguyen viết 18:38 ngày 30/09/2018

Mình phải sử lý cái fscanf trước rồi mới tới cái đó chứ @@

Thai Hoc Nguyen viết 18:31 ngày 30/09/2018

Ko dùng con trỏ BT thôi chứ DS lien kết gì đâu ??

Thai Hoc Nguyen viết 18:31 ngày 30/09/2018

XIn lỗi anh Đạt có lẽ em vẫn chưa quen anh thông cảm cho em

Minh Hoàng viết 18:44 ngày 30/09/2018

xử lí fscanf?
mỗi dòng đọc xong thì phân biệt như thế nào? Vì mình chỉ thấy đọc rồi cấp phát lại thôi?

Nguyễn Minh Dũng viết 18:42 ngày 30/09/2018

XIn lỗi anh Đạt có lẽ em vẫn chưa quen anh thông cảm cho em

Không sao, anh chỉ nhắc nhở vì anh muốn diễn đàn mình thật chất lượng. Có chất lượng thì mới có nhiều người hỏi và nhận được nhiều câu tra lời cũng chất lượng luôn.


Hôm nay cty bận quá anh không giúp được, cái hàm fscanf nó có vấn đề là nhiều khi nó bị dính khoảng trống, tab. Em phải sử lý mấy cái đó nữa. Kiểm tra lại xem lúc em đọc số vào, em có đọc được số hay không? Hay em đọc vào khoảng trắng.

fscanf nó chỉ đọc thôi, nó không “thông minh” lắm đâu.

*grab popcorn* viết 18:29 ngày 30/09/2018

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ỏ
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 ^^

Bài liên quan
0