Professional Documents
Culture Documents
NMLT Bai3 Cac Loi Thuong Gap Trong VC6
NMLT Bai3 Cac Loi Thuong Gap Trong VC6
I. GIỚI THIỆU
Khi biên dịch chương trình (F7), chú ý cửa sổ Build ở dưới, các thông tin về lỗi (errors) và
cảnh báo (warnings) nếu có sẽ được liệt kê chi tiết ở đây:
Ví dụ trong hình: dòng màu vàng là lỗi, màu xanh là cảnh báo. Con số phía trước mỗi
lỗi/cảnh báo cho biết số thứ tự dòng code xuất hiện lỗi/cảnh báo (ở đây là dòng thứ 9). Dựa
vào những ký hiệu cũng như thông tin về lỗi/cảnh báo này, bạn có thể tìm ra nhanh chóng lỗi
của mình nằm ở đâu và cách sửa như thế nào.
Các bước cần làm khi biên dịch chương trình có lỗi:
1) Xem có bao nhiêu lỗi, bấm F4 để nhảy đến dòng chứa lỗi đầu tiên
2) Đọc xem thông báo lỗi là gì, sửa lỗi đó
3) Biên dịch lại project (F7) rồi quay lại bước 1
Trang 1
Hướng dẫn thực hành: Nhập môn lập trình Lớp 08DB_A/B
Ví dụ: (9) missing „;‟ before „return‟ => Thiếu dấu „;‟ trước câu lệnh return ở dòng 9. Rà soát
lại trước dòng 9, phát hiện thiếu dấu „;‟ sau câu lệnh printf(“Hello World!”)
C1010: unexpected end of file while looking for precompiled header directive
Lỗi này xuất hiện khi bạn không tạo Empty project mà tạo một project có sẵn (Hello World)
với 2 file được tạo sẵn là StdAfx.h và StdAfx.cpp. Với loại project này, bạn phải #include
StdAfx.h ngay đầu file .cpp chứa hàm main của bạn. Nếu không trình biên dịch sẽ báo lỗi như
trên. Cách giải quyết:
Cách 1: Thêm dòng #include “StdAfx.h” vào ngay đầu file .cpp chứa code chương
trình của bạn
Trang 2
Hướng dẫn thực hành: Nhập môn lập trình Lớp 08DB_A/B
Cách 2: Vào Project Settings chuyển sang tab C/C++, chọn Precompiled
Headers trong Category, check vào ô Not Using Precompile Header
Ví dụ: chuỗi đưa vào lệnh printf (dòng thứ 8) thiếu dấu đóng ngoặc kép ”
Trang 3
Hướng dẫn thực hành: Nhập môn lập trình Lớp 08DB_A/B
Ví dụ:
Dòng 8 sử dụng biến giatri chưa được khai báo
Dòng 9 sử dụng hàm abs chưa được khai báo
Dòng 10 sử dụng hàm Xuat chưa được khai báo
Cách giải quyết: thêm vào các khai báo thích hợp (khai báo hàm abs được đặt trong math.h)
Trang 4
Hướng dẫn thực hành: Nhập môn lập trình Lớp 08DB_A/B
Trang 5
Hướng dẫn thực hành: Nhập môn lập trình Lớp 08DB_A/B
Ví dụ: hàm main được hiểu là hàm bên trong hàm Xuat và điều này không được phép
(illegal). Từ đó dẫn đến file source code không được kết thúc hợp lệ. Trường hợp này chỉ cần
thêm dấu ngoặc nhọn đóng hàm Xuat (hàm ngay phía trên hàm báo lỗi – main) lại.
Trang 6
Hướng dẫn thực hành: Nhập môn lập trình Lớp 08DB_A/B
2. Sau khi chương trình đã hết lỗi, chạy thử chương trình với thông số như sau và ghi lại
kết quả chạy của 2 hàm TimSVTrungTen và TimSVTrungDiem
Số lượng sinh viên: 4
Sinh viên 1: Nguyen Van An – 08DB999 – 10
Sinh viên 2: Nguyen Thanh Son – 08DB998 – 5
Sinh viên 3: Nguyen Van An – 08DB997 – 4.5
Sinh viên 4: Nguyen Van An – 08DB996 – 5
3. Hãy debug chương trình và liệt kê các tham số quan sát trong từng bước Debug của
hàm TimSVTrungTen và TimSVTrungDiem
Trang 7
Hướng dẫn thực hành: Nhập môn lập trình Lớp 08DB_A/B
Cụ thể:
Debug hàm TimSVTrungTen
flag 0 0 0 …
i 0 0 0 …
j 1 2 3 …
sv_array[i].ten 0x0012ff1c ”a” … … …
sv_array[j].ten 0x0012ff3c “a” … … …
Tương tự cho hàm TimSVTrungDiem
4. Từ bảng liệt kê ở câu 3, hãy cho biết hàm TimSVTrungTen và TimSVTrungDiem
làm gì? (tham số đầu vào là gì? Kết quả đầu ra là gì? Các biến flag, i, j có nghĩa gì?)
5. Câu 2 cho kết quả đúng hay sai? Nếu sai, hãy cho biết lỗi sai nằm ở đâu? Đề xuất cách
sửa nếu có thể.
6. Theo bạn, chương trình còn có thể tiềm ẩn những lỗi nào nữa hay không? Nếu có hãy
nêu ra cụ thể lý do và cách sửa.
Nộp bài: Bài làm bằng file Word, đặt tên file là MSSV.doc (Ví dụ: 08DB333.doc); ghi
rõ họ tên, MSSV, lớp, nhóm học vào đầu bài làm (Ví dụ 08DBA, nhóm 1), lần lượt trả lời
từng câu hỏi. Nộp bài lên Moodle (chung 1 link duy nhất cho tất cả các nhóm TH)
Thời hạn: thông báo sau
Điểm cộng: không bắt buộc nộp, bài nộp sẽ tính là bài tập cộng điểm (phải làm ít nhất 5
câu)
Điểm trừ: các bài làm giống nhau (>70%) sẽ được trừ 1 điểm vào bài thi cuối kỳ.
Trang 8