Giúp sửa lỗi lập trinh c++

mình có đoạn code sau:

int main()
{
    const int luongcb=650000;
    int tnct;
    float heso,luong;
    cout << "nhap so nam cong tac ";
    cin>>tnct;
    if(tnct<12) heso=1.92;
    else if(12<=tnct<36) heso=2.34;
    else if(36<=tnct<60) heso=3;
    else heso=4.5;
    luong=luongcb*heso;
    cout<<"luong cua ban la:"<<luong;
    return 0;

Khi run thì kết quả chỉ đúng ở 2 trường hợp đầu(<12 va 12<=tnct<36) còn 2 th còn lại thì sai. nhưng nếu đổi điều kiện else if( tnct<36) và (tnct<60) thì chạy đúng.
Mình ko hiểu tại sao lại có sự khác nhau giữa 2 đoạn code. Ai biết giúp mình với. tks

Tách thành hai điều kiện mới đúng. Ngôn ngữ lập trình tuyệt đại đa số đều xử lí như vậy. (vì thế nào cũng có người viết NN hỗ trợ cái biểu thức oái oăm đó)

Nói riêng C++ thì xử lí a <= b <= c ntn: (a <= b) <= c, mà a <= b là biểu thức bool, ép về hai giá trị 0 hoặc 1 khi so với int.

2 Likes

bạn cho mình vd về a<=b ép về 0 hoac 1 khi so với int đi bạn. mình mới học nên chưa biết nhiều.

ví dụ 12 < 30 < 15 trả về 1 vì thứ tự thực hiện là (12 < 30) < 15 <=> 1 < 15 = 1
còn (12 < 30) && ( 30 < 15) <=> 1 && 0 = 0

1 Like

Ngoài chiều đó còn có chiều ngược lại: số nguyên khác 0 là true. Nên đừng ngạc nhiên khi thấy những câu như while(n--).

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