Trong ngôn ngữ lập trình C, điều kiện if-else không sử dụng giá trị trả về của điều kiện mà sử dụng giá trị của biến sau khi nó được thiết lập. Điều này có thể gây hiểu lầm nếu chúng ta không hiểu rõ nguyên tắc hoạt động.
1. Thông tin về yêu cầu giải đáp điều kiện if-else trong ngôn ngữ C
Một đồng nghiệp của tôi đã viết một câu lệnh như sau:
if(condition = 0)
{
// thực hiện quá trình A
}
else
{
// thực hiện quá trình B
}
Ở đây, có một sự hiểu lầm về cách hoạt động của điều kiện if-else. Chương trình sẽ luôn thực hiện quá trình B, ngay cả khi tôi giả định rằng if(condition = 0) sẽ trả về true vì giá trị của biến condition đã được đặt là 0. Nhưng thực tế là if sẽ sử dụng giá trị của biến condition và giả định của tôi là sai.
Sau đó, tôi đã thử một phiên bản khác như sau:
if(condition = 2) // hoặc bất kỳ giá trị khác không
{
// thực hiện quá trình A
}
else
{
// thực hiện quá trình B
}
Lần này, chương trình luôn thực hiện quá trình A. Vậy tại sao điều kiện if-else không sử dụng giá trị trả về của điều kiện mà lại sử dụng giá trị của biến bên trái sau khi thiết lập?
2. Giải đáp thắc mắc về điều kiện if-else trong ngôn ngữ C
2.1. Gán giá trị 0 cho biến điều kiện if-else trong ngôn ngữ C
Khi bạn gán giá trị 0 cho biến điều kiện, điều kiện sẽ trở thành false vì 0 đại diện cho false và bất kỳ giá trị nào khác 0 đều đại diện cho true. Vì vậy, khi bạn gán 0 cho điều kiện, nhánh else sẽ được thực thi và khi bạn gán 2 cho điều kiện, nhánh if sẽ được thực thi.
Ví dụ:
if(condition = 0)
Sau khi gán giá trị 0 cho điều kiện, nó sẽ trở thành:
if(condition)
Vì nó là false, câu lệnh trong nhánh if sẽ không được thực thi. Nhưng khi điều kiện được gán giá trị 2, nó hoạt động tương tự và trở thành true. Do đó, câu lệnh trong nhánh if sẽ được thực thi.
2.2. Gán giá trị 2 cho biến điều kiện
Trong ngôn ngữ C, phép gán là một biểu thức trả về giá trị đã được đặt; tức là x = 2 sẽ trả về giá trị 2.
Điều này cho phép bạn thực hiện điều gì đó như sau:
unsigned char ch;
while((ch = readFromFile(f)) != EOF)
{
// thực hiện một số thao tác với ch
}
Câu lệnh trên cũng cho phép bạn sửa đổi giá trị nếu bạn vô tình nhập nhầm dấu == thành dấu =. Điều này không xảy ra trong nhiều ngôn ngữ khác.
Trong vòng lặp đầu tiên, biểu thức condition = 0 sẽ luôn trả về giá trị 0 nên nhánh else được lấy. Tương tự, condition = 2 sẽ trả về giá trị 2 nên nhánh if sẽ được lấy.
Vậy với các bài toán sử dụng điều kiện if-else trong ngôn ngữ C, bạn có thể gán giá trị để giải quyết các câu lệnh. Tùy thuộc vào yêu cầu của bài toán, bạn có thể viết câu lệnh và gán giá trị cho phù hợp.
Để tìm hiểu thêm về các khóa học công nghệ thông tin dễ dàng hơn, hãy tham gia FUNiX. FUNiX là đơn vị đào tạo học viên cử nhân và chứng chỉ với các mảng chuyên sâu về CNTT. Chương trình học lập trình online của FUNiX giúp bạn tiết kiệm thời gian và chi phí học. Hãy tìm hiểu ngay các khóa học lập trình của FUNiX tại:
[i]Xem thêm nhiều hơn bài viết tại đây:[/i]
- Lưu ý để học blockchain trực tuyến hiệu quả cao tại FUNiX
- Lý do nữ giới nên chọn FUNiX để học chuyển nghề IT
- FUNiX trở thành đối tác của Liên minh Blockchain Việt Nam
- 3 lý do bạn trẻ nên học blockchain trực tuyến ở FUNiX
Nguyễn Vân Anh (theo Stack Overflow)
Bài gốc: https://stackoverflow.com/questions/26395548/if-else-condition-in-c