Tài Liệu Bổ Trợ - 50 Lỗi Thường Gặp - Thực Hành - THĐC - IT1110 - Ver 3.0

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 58

50 LỖI THƯỜNG GẶP TRONG THỰC HÀNH

TIN HỌC ĐẠI CƯƠNG - IT1110

Nhó m GVHD và TA
Viện Cô ng nghệ Thô ng tin và Truyền thô ng
Đạ i họ c Bá ch Khoa Hà Nộ i
Giới thiệu chung

• Tà i liệu bổ trợ này do cá c Thầy Cô giá o


hướ ng dẫ n thự c hà nh cù ng độ i ngũ Trợ
giả ng (TA) xây dự ng.
• Tà i liệu gồ m 50 lỗ i (đá nh số #1-#50)
thườ ng gặ p liên quan đến lậ p trình C và lỗ i
khi nộ p bà i lên hệ thố ng CodeForces.
• Tà i liệu sẽ giú p tă ng tính chủ độ ng cho
sinh viên trong quá trình tự họ c và thự c
hà nh họ c phầ n IT1110.
©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 2
Danh sách lỗi

Nội dung # Lỗi Trang


Kiểu dữ liệu và biểu thứ c trong C #1 - #13 5 – 17
Và o ra dữ liệu trong C
Cấ u trú c điều khiển trong C #14 - #32 19 - 37

Mả ng #33 - #47 39 - 53
Xâ u ký tự
Nộ p bà i trên hệ thố ng CodeForces #48 - #50 55 - 57

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 3


Kiểu dữ liệu và biểu thứ c trong C
Và o – Ra dữ liệu trong C

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 4


#1
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i xảy ra khi thự c Khai bá o biến có


hiện phép cộ ng kiểu dữ liệu có
vượ t quá phạ m vi kích thướ c lớ n
củ a kiểu dữ liệu hơn kiểu dữ liệu
(char) dẫ n đến trà n hiện tạ i chẳ ng hạ n
số , tương tự cho cá c int, ...
kiểu dữ liệu khá c
(chú ý vớ i phép
cộ ng và nhâ n cá c số
lớ n có thể gây trà n
số )

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 5


#2
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Biến hằ ng số Chỉ sử dụ ng
(constant) constant vớ i cá c
khô ng đượ c biến cố định,
phép thay khô ng thay đổ i
đổ i. trong suố t quá
trình thự c thi
code.
Vớ i cá c biến có
thay đổ i giá trị,
khô ng đượ c sử
dụ ng kiểu biến
constant.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 6


#3
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i xảy ra khi
thự c hiện kiểm Thay toá n tử ‘=’
tra a = b hay bằ ng toá n tử
khô ng. Tuy ‘==’ để kiểm tra
nhiên trong ví giá trị 2 biến a
dụ này thì b=4 và b có bằ ng
và giá trị trả về nhau hay khô ng.
củ a phép gá n sẽ
là 4 (khá c 0) nên
chương trình sẽ
rẽ và o nhá nh
if(a=b) rồ i in ra
'true’.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 7


#4
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Nhậ p và o số thự c x, xuấ t ra kết quả củ a x+1


Toá n tử x++ có Sử a lạ i x++ thà nh
nghĩa là thự c ++x hoặ c bổ sung
hiện cụ m lệnh 1 lệnh tă ng x lên 1
chứ a x trướ c, đơn vị sau đó mớ i
sau đó mớ i tă ng xuấ t x ra mà n
giá trị củ a x lên hình.
1 đơn vị.
Ngượ c lạ i ++x có
nghĩa là tă ng x
lên trướ c sau đó
mớ i thự c hiện
lệnh.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 8


#5
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Đây là lỗ i sai về ép
Nhậ p và o 2 số nguyên x và y. Xuấ t ra trung bình cộ ng
kiểu dữ liệu. Do x và Thự c hiện ép
củ a 2 số đó .
y là số nguyên, nên kiểu lạ i phép
x+y cũ ng là số chia sao cho
nguyên. Mẫ u số tử số hoặ c
cũ ng là 1 số nguyên, mẫ u số là số
nên kết quả củ a thự c:
(x+y)/2 sẽ là số (float)(x+y)/2
nguyên, sau đó giá hoặ c
trị nguyên này mớ i (x+y)/2.0
đượ c gá n và o biến
thự c float f và xuấ t
ra mà n hình.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 9


#6
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Nhậ p và o 02 số thự c, xuấ t ra tổ ng củ a 02


Chương tình có lỗ i Cú phá p khai bá o đú ng củ a
số thự c đó vớ i độ chính xá c 4 chữ số sau dấ u phẩy
cú phá p khai bá o thư viện là :
thư viện. #include <tên_thư_viện.h>

Ngoà i ra do chương Nếu chương trình yêu cầ u đưa


trình yêu cầ u in ra ra độ chính xá c là x chữ số thì
đầ u ra vớ i độ chính cầ n chuyển định dạ ng là %.xf
xá c 4 chữ số thì kết (tuâ n theo quy tắ c là m trò n. Ở
quả sẽ sai (%f mặ c đây cầ n sử a lạ i thà nh %.4f)
định sẽ đưa ra 6
chữ số sau dấ u
phẩy)

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 10


#7
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Khi thao tá c vớ i Khô ng có cá ch


cá c hà m nhậ p nà o khá c ngoà i
xuấ t (ví dụ : việc cẩ n trọ ng
printf, scanf), khi viết
nếu cầ n đưa chương trình
định dạ ng thì số
lượ ng tham số
phả i tương ứ ng
vớ i số lượ ng
định dạ ng.

Lỗ i logic

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 11


#8
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Vấ n đề nhầ m lẫ n dữ liệu khi đọ c Ta sẽ gắ n giá


từ bà n phím. trị đầ u tiên
Trong ví dụ , ta chưa kịp nhậ p đọ c đượ c
dữ liệu cho p thì p đã nhậ n giá cho biến và
trị do việc ta sơ ý nhậ p thừ a cho sẽ đọ c nố t
n. cá c kí tự cò n
Vì dữ liệu ta gõ và o từ bà n phím lạ i trong bộ
đượ c lưu ở bộ nhớ đệm truy nhớ đệm
xuấ t theo thứ tự củ a Queue – bao gồ m cả
và o trướ c ra trướ c. Khi đó sau kí tự enter.
khi n đượ c lấy ra, đến lệnh yêu
cầ u nhậ p p – dò ng 13, chương
trình thấy trong bộ nhớ đệm có
rồ i nên gá n cho p luô n giá trị
25.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 12


#9
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Đây là lỗi về khai Sửa lại tên thư viện


báo thư viện: Khai đúng: stdio.h –
báo sai tên thư viện. standard input
output

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 13


#10
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Chương trình chỉ Xem lại dòng số 6,


chạy đến hết hàm trước biến number,
scanf  Hàm thêm kí tự ‘&’
scanf chưa truyền
địa chỉ của biến

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 14


#11
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗi cú pháp: Xem lại dòng 8:


chuỗi in ra màn sửa cặp dấu
hình trong câu nháy đơn (‘ ‘)
lệnh printf phải thành nháy kép.
nằm trong dấu
ngoặc kép (“ ”)

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 15


#12
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗi nằm ở dòng Sinh viên cần sử


thứ 9, khi sinh viên dụng kiểu dữ
nhầm chuỗi định liệu cũng như
dạng của float chuỗi định dạng
thành chuỗi định sao cho chính
dạng của int. xác.

Lỗi này có thể xuất Với bài này, cần


phát từ việc nhầm thay “%d” thành
lẫn cơ bản giữa hai “%f” ở dòng 9.
chuỗi định dạng.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 16


#13
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Chương trình sai về logic


Nhập vào 3 số thực a,b,c là 3 cạnh của 1 tam giác. Tính chu vi Sử a lạ i điều
tam giác này? (Kiểm tra điều kiện đầu vào)
và cú phá p củ a toá n tử .
Mộ t tam giá c có 3 cạ nh kiện vò ng lặ p
a,b,c thoả mã n: thà nh:
a+b>c, c+a>b, b+c>a. a+b<=c ||
Khi đó điều kiện vò ng lặ p b+c<=a ||
để lặ p lạ i cầ n: c+a<=b
Nếu a+b<=c HOẶ C c+a<=b
HOẶ C b+c<=a thì cá c giá
trị đầ u và o là sai và cầ n
nhậ p lạ i.
Phép toá n logic HOẶ C
(OR) là ||. Phép toá n VÀ
(AND) là &&. Cò n | và & là
phép toá n OR và AND
trong xử lý bit.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 17


Cấ u trú c điều khiển trong C

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 18


#14
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Sai cú pháp vòng Thay dấu “,”


for(), báo lỗi thiếu thành “;”
dấu “;” do ngăn
cách giữa các
điều kiện trong
vòng for phải
bằng dấu “;”

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 19


#15
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Không xuất hiện Xóa dấu “;”


cảnh báo lỗi, sau for()
nhưng chương
trình không thực
hiện đúng do sau
vòng for có dấu
“;”

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 20


#16
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Không xuất hiện Khai báo


lỗi, nhưng kết int N =1;
quả không đúng
do chưa khởi tạo
giá trị ban đầu
cho N. Khi đó
thực hiện câu
lệnh N = N*i sẽ
cho kết quả với
giá trị mặc định
của N.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 21


#17
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Đây là lỗi về cú Cần đặt các câu


pháp if … else ... lệnh sau khi kiểm
khi có nhiều hơn tra điều kiện của
một câu lệnh cần if vào { }. Ngoài
xử lí trong lệnh if, ra sau lệnh else
else cần thêm cặp { }
để chương trình
nhận biết đoạn
gán min-max nếu
điều kiện rẽ
nhánh sai.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 22


#18
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i do thiếu Bổ sung break


break trong và o case tương
case đầ u tiên. ứ ng

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 23


#19
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i này do Khai bá o biến i


chưa khai bá o
biến đếm i
trong vò ng for

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 24


#20
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Vò ng lặ p while khô ng Bổ sung điều kiện để


có điều kiện dừ ng vò ng lặ p while gặ p
khiến chương trình bị điều kiện dừ ng.
lặ p vô hạ n

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 25


#21
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i vớ i lệnh Sinh viên thườ ng nhầ m lẫ n


switch…case. và đưa và o case câ u lệnh
Sử dụ ng sai cú điều kiện như (a == 0). Nên
phá p vớ i điều nhớ từ ng case là từ ng
kiện case. trườ ng hợ p giá trị củ a biến
điều kiện đưa và o lệnh
switch. Ở ví dụ này là a. Câ u
lệnh phả i viết lạ i như sau:
switch(a)
{
case 0:
////
case 1:
////
……
}

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 26


#22
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Sử dụ ng sai Sử a lạ i đú ng cấ u trú c:
cú phá p củ a <điều kiện> ?
lệnh viết tắ t <Đú ng> : <Sai>
if else Vớ i bà i này cầ n sử a
thà nh:
var>10?”True”:”False”

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 27


#23
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Ví dụ mắ c lỗ i Lưu ý khi thự c


logic trong hiện cá c khố i
khố i lệnh lệnh If_else liên
if_else. Kiểm tiếp. Cá c điều
tra 1 số có kiện sau phả i
chia hết 2, 3, 6 nằ m ngoà i hoà n
hay khô ng. toà n cá c khả
Tuy nhiên kết nă ng có thể xảy
quả chỉ hiện ra ở trườ ng hợ p
thị chia hết trướ c, trá nh bị
cho 6. chồ ng chéo điều
kiện logic dẫ n
đến sai kết quả .

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 28


#24
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Bài toán: Nhập vào số thực x, xuất kết quả ra mà hình giá trị
hàm số sau: Đây là lỗ i sai về Sử a lạ i điều
logic. kiện là :
Điều kiện trong -1<=x && x<=1
lệnh if chưa chính
xá c, giả sử vớ i đầ u
và o là -3 thì:
-1 <= -3  Sai = 0
0 <= 1  Đú ng.
Do đó , biểu thứ c
trong lệnh if sẽ
đượ c thự c hiện vớ i
đầ u và o này.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 29


#25
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Bài toán: Nhập vào số nguyên n, xuất ra màn hình chữ số lớn
nhất của số đó. Chương trình lặ p vô Bổ sung cặ p
hạ n, thiếu cặ p { } bao bọ c
{…} cho cá c lệnh cá c dò ng lệnh
bên trong vò ng lặ p 7, 8 và 9.
while.
Nếu khô ng có {…} thì
chương trình sẽ chỉ
xét dò ng đầ u tiên
ngay bên dướ i while
là thuộ c vò ng lặ p,
cá c dò ng dướ i nữ a là
ngoà i vò ng lặ p.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 30


#26
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Bài toán: Nhập vào số nguyên n, xuất ra màn hình các số từ 1


đến n mà không chia hết cho 5. Lỗ i sai logic. Khi Thay lệnh break
chương trình gặ p bằ ng lệnh
lệnh break sẽ continue
nhảy ra khỏ i vò ng
lặ p đó .

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 31


#27
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Yêu cầu: Nhập vào số nguyên dương n (sử dụng do-while để kiểm
tra). In ra màn hình các số nguyên dương nhỏ hơn n.

Đây là lỗ i Khai bá o biến i


khô ng cho trướ c khi và o
phép khai vò ng lặ p for.
bá o biến
trong vò ng
lặ p for.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 32


#28
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Yêu cầu: Nhập vào số nguyên n khác 0 (sử dụng do-while để kiểm
tra). In ra màn hình n. Đây là lỗ i thiếu Bổ sung thêm
dấ u “(“ trướ c “!”. “(“ và “)”
Lưu ý cú phá p do- đú ng vị trí để
while: sử a lỗ i.
do
{
Câ u lệnh;
}
while (biểu thứ c
điều kiện);

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 33


#29
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Yêu cầu: Nhập vào số nguyên dương n < 20 (sử dụng do-while
để kiểm tra). In ra màn hình n.
Đây là lỗ i sai về Vớ i đề bà i n <
logic. Lưu ý vớ i do- 20 thì cầ n viết
while: lệnh trong lạ i lệnh trong
do sẽ tiếp tụ c thự c while như thế
hiện khi điều kiện nà o.
trong while là
đú ng. Như vậy, câ u
lệnh trong while
phả i kiểm tra số
nhậ p và o có nằ m
ngoà i khoả ng giá
trị yêu cầ u hay
khô ng.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 34


#30
Lỗi xuất hiện Giải thích lỗi Cách xử lý
Yêu cầu: Nhập vào số 0 hoặc 1. Kiểm tra nếu số nhập vào là 0 thì thông
báo “Ban da nhap so 0!”, ngược lại thông báo “Ban da nhap so 1!”. Trình biên dịch Đặ t thêm
khô ng bá o lỗ i, tuy break và o
nhiên khi nhậ p và o đú ng vị trí
0 thì kết quả thu để thu đượ c
đượ c lạ i là “Ban da kết quả
nhap so 0!Ban da mong muố n.
nhap so 1!”. Nguyên
nhâ n khi đã in ra
đượ c “Ban da nhap
so 0!” chưa sử dụ ng
lệnh break để thoá t
ra khỏ i câ u lệnh
switch.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 35


#31
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i thiếu hoặ c Khi thự c hiện cá c câ u lệnh


thừ a dấ u khố i trong C, sinh viên cầ n
đó ng ngoặ c cẩ n thậ n trong việc thêm cá c
củ a đoạ n lệnh dấ u đó ng mở ngoặ c mỗ i khi
khố i. thêm 1 câ u lệnh khố i (for,
while, switch…case,if…else,
do…while, hay mộ t
function…). Thự c hiện “thụ t”
và o đầ u dò ng theo vị trí củ a
từ ng khố i mộ t cá ch nhấ t
quá n giú p cá c dò ng lệnh dễ
nhìn, trình bày đẹp và nhấ t
là dễ gỡ lỗ i.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 36


#32
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i vớ i lệnh Trong C có khá ít


switch…case. lệnh sử dụ ng dấ u
Khô ng sử dụ ng “:”. Cá c lệnh thườ ng
dấ u “:”, thay phâ n tá ch nhau bở i
và o đó lạ i dù ng dấ u “;”. Do đó sinh
dấ u “;” viên mớ i là m quen
vớ i C thườ ng nhầ m
lẫ n ở loạ i lệnh này.
Chú ý trong khố i
case khô ng cầ n sử
dụ ng dấ u “ {…}”.
Tuy nhiên sử dụ ng
cũ ng khô ng sai.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 37


Mả ng
Xâ u ký tự

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 38


#33
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Đây là lỗ i về khở i tạ o
giá trị cho mả ng vượ t Khai bá o
quá số phầ n tử khai x[6], hoặ c
bá o. Tuy mả ng x khai lớ n hơn
bá o có 5 phầ n tử , hoặ c sử
nhưng lưu ý chuỗ i sẽ dụ ng khai
luô n kết thú c vớ i ký bá o sau:
tự ‘\0’ cuố i cù ng. Vớ i char x[]
ví dụ minh họ a thì
chuỗ i sẽ là
“12345\0”, nhưng ký
tự ‘\0’ sẽ khô ng hiển
thị ra mặ c dù nó vẫ n
chiếm 1 phầ n tử .

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 39


#34
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Xó a 1 phầ n tử bấ t Cá ch giả i quyết là


kỳ trong mả ng, tìm tớ i vị trí phầ n
như hình bên là tử đó , tìm cá ch
sai lỗ i logic, đang cho nó ra khỏ i
gá n giá trị cho mả ng và giả m kích
phầ n tử cầ n xó a thướ c mả ng đi 1.
bằ ng 0 Ví dụ : chuyển vị
trí phầ n tử đó
xuố ng cuố i mả ng
rồ i giả m kích
thướ c mả ng đi 1
phầ n tử là xong.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 40


#35
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Mả ng khai bá o Khai bá o lạ i mả ng
vớ i kích thướ c mớ i hoặ c Kiểm
8 phầ n tử nhưng soá t số lượ ng
sử dụ ng vượ t phầ n tử mả ng khi
quá số phầ n tử viết code
ban đầ u khiến 1
số vù ng nhớ
khá c bị ghi đè

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 41


#36
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Đây là lỗ i hay Mộ t cá ch xử
gặ p. trong C lý hay đượ c
khô ng thể so dù ng là sử
sá nh 2 mả ng dụ ng vò ng
bằ ng cá ch so lặ p duyệt
sá nh tên mả ng, từ ng phầ n tử
Vì tên mả ng chỉ trong 2
chứ a địa chỉ củ a mả ng rồ i so
phẩ n tử đầ u sá nh chú ng
tiên trong vớ i nhau.
mả ng.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 42


#37
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Chương trình Xem lạ i và sử a phầ n


khô ng chạy đượ c khai bá o biến mả ng.
và bá o lỗ i ở dò ng 7. Lưu ý khi khai bá o biến
+Nguyên nhâ n: mà khô ng kèm giá trị
Tạ i dò ng 4, khi khai khở i tạ o thì phả i nhớ
bá o biến mả ng vớ i xá c định số lượ ng phầ n
tên ‘mang’ ngườ i tử tố i đa củ a mả ng. Ví
lậ p trình quên cặ p dụ : int array[100];.
ký tự ‘[]’. Đây là lỗ i Cò n nếu muố n khai bá o
cú phá p khai bá o biến kèm giá trị khở i
biến mả ng. tạ o thì có thể khô ng
cầ n xá c định số lượ ng
phầ n tử tố i đa. Ví dụ :
int array[] = {1,2,3,5};

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 43


#38
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Mặ c dù khai bá o mả ng Chú ý khi


array vớ i kích cỡ 5 khai bá o kích
phầ n tử , nhưng khi sử cỡ mả ng. Chú
dụ ng array[5], ý chỉ mụ c
array[6]… vẫ n khô ng index khi sử
bá o lỗ i. Do cá c địa chỉ dụ ng phầ n tử
array[5], array[6]… mả ng.
vẫ n tồ n tạ i tiếp nố i
sau array[4], và chứ a
cá c giá trị “rá c”.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 44


#39
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Bà i toá n thêm Khai bá o


phầ n tử và o mả ng mả ng vớ i
thườ ng bị lỗ i vượ t kích cỡ lớ n.
quá kích cỡ mả ng. Hoặ c kiểm
Như ví dụ thì tra mả ng đã
mả ng bị trà n ra đầy chưa,
ngoà i nên mấ t giá mỗ i lầ n thêm
trị 9. phầ n tử thì
phả i nớ i rộ ng
kích cỡ mả ng.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 45


#40
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Mả ng nhiều chiều - ở Chú ý khi


đây là mả ng hai chiều. lậ p trình
Khai bá o ma trậ n 2 khô ng để
hà ng 4 cộ t nhưng in nhầ m lẫ n
ra ma trậ n lạ i là 4 kích cỡ từ ng
hà ng 2 cộ t. Ma trậ n in chiều củ a
ra bị mấ t mộ t số giá mả ng.
trị và lạ i có thêm mộ t
số giá trị lạ .
(Lệnh in ma trậ n bị
nhầ m: i chạy từ 0 đến
n và j chạy từ 0 đến
m).

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 46


#41
Lỗi xuất hiện Giải thích lỗi Cách xử lý

So sá nh 2 xâ u vớ i Khi so sá nh 2
nhau. Lỗ i xảy ra khi xâ u sử dụ ng
sử dụ ng ==. Mặ c dù hà m strcmp()
chương trình có thể để so sá nh
compile đượ c nhưng
chương trình sẽ in
sai kết quả . Cụ thể ở
đây, mong muố n in
ra Yes nhưng ở
chương trình lạ i in
ra No.
Lý do lỗ i: chương
trình đang so sá nh 2
địa chỉ củ a 2 mả ng
str1 và str2

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 47


#42
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Nhậ p xâ u sử dụ ng Sử dụ ng hà m
scanf. Khi in ra mà n gets(). Tuy
hình chỉ nhậ n mộ t nhiên hà m
phầ n xâ u nhậ p và o. gets() này đã
Cụ thể là phầ n xâ u bị xó a trong
trướ c dấ u Space phiên bả n C11.
(“tin”) thay vì toà n Gợ i ý sử dụ ng
bộ xâ u (“tin hoc dai hà m fgets()
cuong hoc ky thay thế.
20192”).
Lý do lỗ i: hà m
scanf() sẽ dừ ng
tổ ng hợ p ký tự khi
gặ p dấ u xuố ng dò ng,
dấ u cá ch.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 48


#43
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Xâ u s khô ng Xó a bộ đệm
đượ c nhậ p và o. trướ c khi nhậ p
Do hà m scanf xâ u. Sử dụ ng
kết thú c bằ ng kí lệnh fflush().
tự \n, kí tự này
đượ c lưu trong Thêm lệnh
bộ đệm. Lệnh fflush(stdin)
fgets() khi chạy trướ c lệnh
sẽ nhậ n kí tự fgets()
này từ bộ đệm
và kết thú c
nhậ p.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 49


#44
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Sai thứ tự tham Kiểm tra lạ i thứ tự


số khi sử dụ ng chuỗ i nguồ n,
hà m strcpy() chuỗ i đích khi sử
dụ ng hà m
strcpy()

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 50


#45
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i do sử Sử a lạ i cá ch
dụ ng sai ‘ ‘ biểu diễn
và “ ”. Lưu ý chuỗ i.
‘ ‘ dù ng cho
ký tự cò n “ “
dù ng cho
chuỗ i.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 51


#46
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗ i do names là Tìm hiểu thêm


mộ t mả ng nhiều phương phá p in
chuỗ i nên dù ng danh sá ch cá c
printf vớ i %s sẽ chuỗ i (gợ i ý dù ng
chỉ in ra chuỗ i vò ng for)
đầ u tiên trong
mả ng thay vì tấ t
cả cá c chuỗ i
trong mả ng.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 52


#47
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Nhậ p xâ u Xem lạ i dò ng
sử dụ ng 9, sử a %c
%c, biến sẽ thà nh %s
chỉ lưu trữ (dù ng để đọ c
1 kí tự đầ u và o chuỗ i kí
tiên đượ c tự khô ng có
nhậ p và o khoả ng
trắ ng)

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 53


Nộ p bà i lên hệ thố ng CodeForces

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 54


#48
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lỗi limit khi submit trên hệ thống codeforces: Lỗ i bá o time limit ở test 1. Vớ i lỗ i do dù ng hà m
Vớ i lỗ i này, thườ ng do sinh getch(). Xoá bỏ lệnh
viên sử dụ ng cá c lệnh là m này và thư viện
chương trình “đợ i” hoặ c conio.h tương ứ ng.
thuậ t toá n chưa tố i ưu dẫ n Vớ i lỗ i do thuậ t toá n
đến quá thờ i gian chạy. chưa tố i ưu, kiểm tra
Trong ả nh bên là do dù ng lạ i và tố i ưu lạ i thuậ t
hà m getch(). toá n.
Hà m getch() sẽ đợ i 1 input
bấ t kỳ từ bà n phím sau đó
mớ i chạy tiếp, vì thế, khi
đọ c tớ i lệnh này, chương
trình sẽ đứ ng “đợ i” suố t tạ i
dò ng lệnh đó .

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 55


#49
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Biên dịch lỗ i khi Kiểm tra lạ i xem


submit lên lỗ i cú phá p củ a
CodeForces thườ ng code. Vớ i lỗ i cú
do lỗ i cú phá p phá p, sinh viên có
(thiếu ngoặ c, chấ m thể chạy lạ i code
phẩy…) đó trên Dev C++,
trình biên dịch
củ a Dev C++ sẽ
Lỗi xảy ra: bá o vị trí lỗ i.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 56


#50
Lỗi xuất hiện Giải thích lỗi Cách xử lý

Lệnh fflush(stdin) sẽ xoá bộ nhớ Khô ng sử dụ ng


đệm củ a stdin trên codeforces. Vì lệnh fflush(stdin)
thế, chương trình sẽ chạy ra trong cá c bà i phả i
output sai khi submit trên submit lên
CodeForces. Codeforces. Tìm
Trên máy tính, input nhậ p và o hiểu cá c phương
tuầ n tự , vì thế fflush chỉ xoá đi bộ phá p khá c để
nhớ tạ m cá c ký tự đã nhậ p trướ c nhậ n đượ c dữ liệu
đó , cá c ký tự sau vẫ n tiếp tụ c từ stdin cho đú ng.
nhậ p bình thườ ng. Cò n trên Sinh viên có thể
Codeforces, input ở stdin đã thử kiểm nghiệm
đượ c tạ o sẵ n, lệnh này sẽ xoá bỏ code vớ i chứ c
bộ nhớ đệm củ a input và là m cho nă ng custom
chương trình chạy sai khô ng như invocation củ a
ý muố n. CodeForces.

©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 57


©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0

You might also like