01/10/2018, 10:19

Code sau khi nhập input thì không thực hiện được phép tính

#include <cmath>
#include <cstdlib>
double bodyfatnam(double cannang, double sodovong2);
double bodyfatnu(double cannang, double sodovong2);

int main()
{
    using namespace std;
    char name[20];
    cout <<" Enter your name here: " << endl;//nhap ten
    cin >> name;
    cout << "Welcone," <<name<< endl;
    double cannang;
    double sodovong2;
    cout << "Nhap can nang cua ban: "<<endl;//nhap can nang
    cin >> cannang;//(1)
    cout << "Nhap so do vong 2 cua ban: "<<endl;//nhap so do vong2
    cin >> sodovong2;//(2)
    cout << "Nhap gioi tinh cua ban: "<<endl ;//nhap gioi tinh
    char gioitinh[0];
    cin >> gioitinh;
    double ketquanam;
    double ketquanu;
    ketquanam= bodyfatnam(cannang,sodovong2);//1 +2+ cong thuc nam
    ketquanu= bodyfatnu(cannang,sodovong2);// 1+ 2 + cong thuc nu
    if (gioitinh[0] == 'nam'){
        cout << "Your body fat is " << ketquanam<<endl;
        }
    else if (gioitinh[0] == 'nu'){
        cout << "Your body fat is " << ketquanu <<endl;
        }
    system("pause");
    return 0;
}
double bodyfatnam(double cannang, double sodovong2){//cong thuc nam
    return (-98.42 + (4.15 *sodovong2) - (0.082 * cannang))/cannang;
}
double bodyfatnu(double cannang, double sodovong2){//cong thuc nu
    return (-76.76 + (4.15 *sodovong2) - (0.082 * cannang))/cannang;
}
HK boy viết 12:29 ngày 01/10/2018

gioitinh[0] == ‘nam’

gioitinh chứ không phải là gioitinh[0] nhé.

Bạn đưa phần title của câu hỏi vào trên vần code để mình sửa lại title cho gọn hơn nhé.

Henry viết 12:26 ngày 01/10/2018

Đầu tiên là ở việc bạn khai báo char gioitinh[0]. Bạn khai báo như thế này thì không nên vì 'nam' là 3 kí tự, 'nu' là 2 kí tự thì bạn khai báo ít nhất phải là char gioitinh[4];. Mặc dù bạn khai báo như vậy và vẫn in ra đương, nhưng cũng nên tuân thủ luật lệ.
Và sai chính là ở chỗ này
gioitinh[0] == 'nam'. ' ' chỉ nhận 1 kí tự thôi, bạn phải đổi nó lại thành " ".

Khoa NTA viết 12:26 ngày 01/10/2018

Uầy, C hay C++ đều không cho phép so sánh kiểu mảng kiểu C với nhau đâu trời (cho dù compile không báo lỗi) vì hiểu theo mức thấp hơn, so sánh hai mảng là so sánh từng phần tử của mảng đó trong khi đại diện cho nó là tên biến - tức là địa chỉ phần tử đầu tiên -> so sánh khập khiễng.

Giải pháp: đổi kiểu gioitinh thành string gioitinh; và thay ngơặc đơn thành ngoặc kép :v Lý do mà string làm được là vì nó có hiện thực hóa (nghe ghê hén - implement) toán tử pằng-pằng ==.

P/s: học Rust đi các bạn!
Đừng click vào dòng dưới mình chửi tùm lum ấy!
[spoiler]
bodyfatnam/bodyfatnu: wut da hell, man. Tại sao không là man & woman cho rồi, tiếng Anh, tiếng Việt từa lưa. Cố gắng đặt tên biến có ý nghĩa duy nhất, không chung chung và dùng tiếng Anh (nếu không thì tiếng Việt 100%).
Thiếu thư viện iostream, không cẩn thận gì cả.
Đã lập trình C++ thì hãy dùng đồ của C++ và hạn chế tối đa đồ của C
Nên khai báo biến đầu hàm, dầu các khối lệnh để dễ chỉnh sửa, gỡ lỗi.
Nên tách các đoạn code có chức năng khác nhau ra (chỉ cần cách 1 dòng là đủ). Chú ý các thụt đầu dòng (indentation) và phong cách code, người gỡ lỗi nhìn ngán là họ lướt đi hết :v
[/spoiler]

Việt Hưng Vũ viết 12:26 ngày 01/10/2018

cảm ơn anh. những lỗi trên em sẽ khắc phục.

Bài liên quan
0