30/09/2018, 16:08

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)

Bùi Thanh Tùng viết 18:24 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:16 ngày 30/09/2018

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

Làm sao để có thể hiển thị syntax highlighting bằng markdown? Các bạn phải đánh dấu ``` như ví dụ dưới đây Chú ý, dấu ``` được tạo ra bởi nút nằm bên trái số 1 trên bàn phím, nút này sẽ là ~ khi bấm giữ Shift Ví dụ cho C Nội dung: ``` void main() { } ``` Và đừng quên ``` ở cuối Kết quả void main() { } Ví dụ cho Pascal Nội dung: ``` Program HelloWorld; Begin WriteLn('Hello world!') {no ";" is required after the last statement of a block - adding one adds a "null stateme…

if(0 <= diem_ < 4.5)

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

if (0 <= diem_ && diem_ < 4.5)

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

Khoa Thành viết 18:19 ngày 30/09/2018

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

Thực tế khắc nghiệt viết 18:23 ngày 30/09/2018

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

Bùi Thanh Tùng viết 18:17 ngày 30/09/2018

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

cái này hay nha

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

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

Nguyễn Minh Dũng viết 18:20 ngày 30/09/2018

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

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.

Câu lệnh này chỉ sai trong C++ hay trong cả các ngôn ngữ lập trình khác

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

viết 18:11 ngày 30/09/2018

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.

Câu lệnh này chỉ sai trong C++ hay trong cả các ngôn ngữ lập trình khác

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

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

Ideone.com

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

Nguyễn Minh Dũng viết 18:17 ngày 30/09/2018

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;
}
viết 18:10 ngày 30/09/2018

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à

Nguyễn Minh Dũng viết 18:10 ngày 30/09/2018

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:

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

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

Bùi Thanh Tùng viết 18:25 ngày 30/09/2018

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.

Giải thích như này hợp lí nha
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

Bài liên quan
0