C++ Sự khác nhau giữa các câu lệnh so sánh

Mình đặt tiêu đề như trên k biết có chính xác không nữa.
Trong chương trình C++ sau:

#include <iostream>
int main()
{
    float diem_;
    std::cout << "CT Phan loai hoc sinh dua vao so diem nhap tu ban phim." << std::endl;
    std::cout << "Nhap diem cua hoc sinh: ";
    std::cin >> diem_;
    /*if(0 <= diem_ < 4.5)*/
    if (0 <= diem_ && diem_ < 4.5)
        std::cout << "Hoc sinh duoc " << diem_ << " diem se phai o lai lop." << std::endl;
    else if (4 <= diem_ && diem_ < 6.5)
        std::cout << "Hoc sinh duoc " << diem_ << " diem duoc xep loai HS Trung Binh." << std::endl;
    else if (6.5 <= diem_ && diem_ < 8.5)
        std::cout << "Hoc sinh duoc " << diem_ << " diem duoc xep loai HS Kha." << std::endl;
    else if (8.5 <= diem_ && diem_ <= 10)
        std::cout << "Hoc sinh duoc " << diem_ << " diem duoc xep loai HS Gioi." << std::endl;
    else
        std::cout << "Diem cua hoc sinh co gia tri tu 0 toi 10." << std::endl;

    return 0;
}

Các bạn giải thích giúp mình sự khác nhau giữa 2 câu lệnh:
if(0 <= diem_ < 4.5)
if (0 <= diem_ && diem_ < 4.5)

1 Like

Thêm cái ảnh cho dễ nhìn :smiley:

1 Like

Dùng Markdown cũng dễ nhìn vậy :smile: Anh đã sửa bài của em dùng Markdown đấy.

Đây là câu lệnh sai vì C không hiểu được cấu trúc này :smile:

Đây là câu lệnh đúng

2 Likes

Nếu viết kiểu 0<= diem<4.5 C++ nó sẽ không hiểu câu lệnh này. Giống như là nó so sánh 0 với điểm thôi chứ nó không ssanh với 4.5 đc. Khi điều kiện thỏa điểm lớn hơn không và bé hơn 4.5 thì nó mới chạy vào hàm if nếu đúng 1 trong 2 thì nó cũng sẽ không chạy

2 Likes

chỉ có thể nói là " vô cùng ảo diệu "! ý tưởng mới đây! :smiley:

1 Like

cái này hay nha :smiley:

Câu lệnh sai hay là cú pháp sai. Code k hề báo lỗi mà @Đạt.

[quote=“Khoa_Thanh, post:4, topic:1639”]
Nếu viết kiểu 0<= diem<4.5 C++ nó sẽ không hiểu câu lệnh này.
[/quote] Câu lệnh này chỉ sai trong C++ hay trong cả các ngôn ngữ lập trình khác ? C++ không hiểu câu lệnh hay do mình viết câu lênh sai cú pháp ?

[quote=“Khoa_Thanh, post:4, topic:1639”]
Giống như là nó so sánh 0 với điểm thôi chứ nó không ssanh với 4.5 đc.
[/quote] Mình nhập vào giá trị điểm = -1 thì kết quả là vẫn thỏa mãn điều kiện if

Câu lệnh này không có được định nghĩa, không báo lỗi không có nghĩa là chạy đúng. C standard có một câu thế này: luôn tin tưởng vào lập trình viên.

Nhưng nếu lập trình viên code bậy thì ráng chịu. hehe.

Hầu hết mọi ngôn ngữ đều không hiểu.

3 Likes
#include <iostream>
using namespace std;

int main() {
	int n = 2;
	if(1 <= n <= 3)
	        cout << "OK";
	return 0;
}

Làm như vầy hoàn toàn đúng, chỉ đơn giản là không đúng với đề bài thôi.
Vì nó thực hiện so sánh từ trái qua phải. if(1 <= n <= 3) sẽ tương đương với if( ((1 <= n) <= 3)).
1 <= n đúng nên trả về 1, 1 <= đúng tiếp tục trả về 1 nên sẽ đưa dòng OK ra màn hình.

Thay điều kiện thành if(1 <= n <= -10) thì không in dòng OK ra màn hình thôi.

1 Like

vậy @minh_vu_03 giải thích cái này xem.

#include <iostream>
using namespace std;

int main()
{
    int n = 5;
    if(1 <= n <= 3)
        cout << "OK";
    return 0;
}
3 Likes

Nó vẫn in ra màn hình dòng OK thôi a Đạt. 1 <= 5 trả về 1, đem 1 so sanh với 3 mà :smiley:

1 Like

Thì đấy là lý do anh bảo C++ không hiểu được phép so sánh ấy, có phải mình muốn so sánh gia trị thuộc về khoảng, đoạn không?

Để tránh hiểu nhầm nên anh phải khẳng định như post ở trên: :smiley:

Nhưng mà anh cũng không biết cái này, vì anh không sử dụng cách này. Cái phân tích ở trên của em anh chưa kiểm chứng. Có thể đúng :smile:

2 Likes

Giải thích như này hợp lí nha :smiley:
Cảm ơn mọi người rất nhiều nha. Mình cảm thấy mình đã hiểu vấn đề này :smiley:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?