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

VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG


GIỚI THIỆU CHUNG

• Gồm 50 lỗi thường gặp khi thực hành


THĐC.
• Giúp sinh viên học thực hành dễ dàng hơn.

Trang 2
NỘI DUNG

NỘI DUNG LỖI TRANG

Nộp bài trên hệ thống CodeForces #1 - #3 5–7

Kiểu dữ liệu và biểu thức trong C


#4 - #16 9 - 21
Vào ra dữ liệu trong C

Cấu trúc điều khiển trong C #17 - # 35 23 - 41

Mảng và Xâu ký tự #36 - #50 43 - 57

Trang 3
NỘP BÀI LÊN HỆ THỐNG CODEFORCES

Trang 4
#1 – LỖI LIMIT KHI SUBMIT BÀI

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
Thường do sinh viên sử getch(): Xoá bỏ lệnh
dụng các lệnh làm chương này và thư viện
trình “đợi” hoặc thuật toán conio.h tương ứng.
chưa tối ưu dẫn đến quá Với lỗi do thuật toán
thời gian chạy. Trong ảnh chưa tối ưu: kiểm
bên là do dùng hàm tra lại và tối ưu lại
getch(). thuật 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 đó.

Trang 5
#2 – BIÊN DỊCH LỖI DO SAI CÚ PHÁP

LỖI XUẤT HIỆN GIẢI THÍCH LỖI CÁCH XỬ LÝ

Biên dịch lỗi khi Với lỗi cú pháp,


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

Lỗi xảy ra:

Trang 6
#3 – LỖI SAI OUTPUT

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.

Trang 7
KIỂU DỮ LIỆU VÀ BIỂU THỨC TRONG C
VÀO – RA DỮ LIỆU TRONG C

Trang 8
#4 – LỖI TRÀN SỐ

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 tính vượt kiểu dữ liệu có
quá phạm vi của kích thước lớn
kiểu dữ liệu (char) hơn kiểu dữ liệu
dẫn đến tràn số, hiện tại chẳng hạn
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ố )

Trang 9
#5 – LỖI KHI THAY ĐỔI GIÁ TRỊ CỦA HẰNG SỐ

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.

Trang 10
#6 – LỖI NHẦM KÝ HIỆU SO SÁNH

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í dụ giá trị 2 biến a
này thì b=4 và và b có bằng
giá trị trả về của nhau hay không.
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’.

Trang 11
#7 – LƯU Ý KHI DÙNG “++”

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.

Trang 12
#8 – LỖI KHI ÉP KIỂU

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.

Trang 13
#9 – LỖI KHAI BÁO THƯ VIỆN

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
số thực đó với độ chính xác 4 chữ số sau dấu phẩy Chương tình có lỗi Cú pháp khai báo đúng của
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)

Trang 14
#10 – LỖI THAO TÁC VỚI HÀM NHẬP XUẤT

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

Trang 15
#11 – LỖI NHẦM DỮ LIỆU ĐỌC TỪ BÀN PHÍM

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.

Trang 16
#12 – LỖI KHAI BÁO SAI TÊN THƯ VIỆN

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

Trang 17
#13 – LỖI SAI CÚ PHÁP

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

Trang 18
#14 – LỖI SAI CÚ PHÁP

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 (“ ”)

Trang 19
#15 – LỖI SAI CHUỖI ĐỊNH DẠNG

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.

Trang 20
#16 – LỖI SAI CÚ PHÁP VÀ ĐỊNH DẠNG CỦA TOÁN TỬ

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
và cú pháp của toán tử. Sửa lại điều
tam giác này? (Kiểm tra điều kiện đầu vào)
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.

Trang 21
CẤU TRÚC ĐIỀU KHIỂN TRONG C

Trang 22
#17 – LỖI SAI CÚ PHÁP

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
“;”

Trang 23
#18 – LỖI SAI CÚ PHÁP

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
“;”

Trang 24
#19 – LỖI CHƯA KHỞI TẠO GIÁ TRỊ BAN ĐẦU

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.

Trang 25
#20 – LỖI SAI CÚ PHÁP

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

Trang 26
#21 – LỖI THIẾU BREAK

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

Trang 27
#22 – LỖI SAI CÚ PHÁP

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

Trang 28
#23 – LỖI LẶP VÔ HẠN

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

Trang 29
#24 – LỖI SAI CÚ PHÁP

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


switch…case. Sử lẫn và đưa vào case câu
dụng sai cú pháp lệnh điều kiện như (a ==
với điều kiện 0). Nên nhớ từng case là
case. từng 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:
////
……
}

Trang 30
#25 – LỖI SAI CÚ PHÁP

LỖI XUẤT HIỆN GIẢI THÍCH LỖI CÁCH XỬ LÝ

Sử dụng sai cú Sửa lại đúng cấu


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

Trang 31
#26 – LỖI SAI ĐIỀU KIỆN

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ó chia kiện sau phải
hết 2, 3, 6 hay nằm ngoài hoàn
không. Tuy toàn các khả
nhiên kết quả năng có thể xảy
chỉ hiện thị ra ở trường hợp
chia hết cho 6. trước, tránh bị
chồng chéo điều
kiện logic dẫn
đến sai kết quả.

Trang 32
#27 – LỖI SAI LOGIC

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
𝑓(𝑥) = ቊ
𝑎𝑟𝑐 𝑐𝑜𝑠( 𝑥) , −1 ≤ 𝑥 ≤ 1 logic. kiện là:
𝑥+5 , 𝑥 < −1 ∪ 𝑥 > 1
Đ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.

Trang 33
#28 – LỖI LẶP VÔ HẠN

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 bên các dòng lệnh
trong vòng lặp while. 7, 8 và 9.
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.

Trang 34
#29 – LỖI SAI LOGIC

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 đó .

Trang 35
#30 – LỖI KHAI BÁO BIẾN SAI

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.

Trang 36
#31 – LỖI SAI CÚ PHÁP

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);

Trang 37
#32 – LỖI SAI LOGIC

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.

Trang 38
#33 – LỖI THIẾU LỆNH BREAK

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 Trình biên dịch Đặt thêm
1!”.
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.

Trang 39
#34 – LỖI THIẾU HOẶC THỪA DẤU NGOẶC

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 đóng khối trong C, sinh viên
ngoặc của đoạn cần cẩn thận trong việc
lệnh khối. thêm các dấu đóng mở
ngoặc mỗi khi 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.

Trang 40
#35 – LỖI SAI CÚ PHÁP

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.

Trang 41
MẢNG
XÂU KÝ TỰ

Trang 42
#36 – LỖI KHỞI TẠO GIÁ TRỊ

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ử.

Trang 43
#37 – LỖI LOGIC

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.

Trang 44
#38 – LỖI KHAI BÁO BIẾN SAI

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 đè

Trang 45
#39 – LỖI SAI KHI SO SÁNH MẢNG

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.

Trang 46
#40 – LỖI SAI CÚ PHÁP

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

Trang 47
#41 – LỖI KHI SỬ DỤNG MẢNG

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”.

Trang 48
#42 – LỖI VƯỢT QUÁ KÍCH THƯỚC MẢNG

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.

Trang 49
#43 – LỖI NHẦM HÀNG VÀ CỘT

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).

Trang 50
#44 – LỖI SO SÁNH MẢNG

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

Trang 51
#45 – LỖI SỬ DỤNG HÀM KHÔNG PHÙ HỢP

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.

Trang 52
#46 – LỖI THIẾU LỆNH FFLUSH

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.

Trang 53
#47 – LỖI SAI THỨ TỰ THAM SỐ

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()

Trang 54
#48 – LỖI NHẦM NGOẶC ĐƠN VÀ NGOẶC KÉP

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.

Trang 55
#49 – LỖI LẬP TRÌNH CHƯA ĐÚNG

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.

Trang 56
#50 – LỖI SAI CÚ PHÁP

LỖI XUẤT HIỆN GIẢI THÍCH LỖI CÁCH XỬ LÝ

Nhập xâu sử Xem lại


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

Trang 57

You might also like