Thao tác nhập chuỗi không thành công

Sao nó nhập chuỗi ký tự (Nguyen van a) nó lại k nhận nhỉ? Mong mọi người giúp đỡ!

#include<iostream>
using namespace std;
class SP
{
    private:
        float donggia;
        int soluong;
        float tinhthanhtien()
        {
            this->thanhtien = this->donggia * this->soluong;
            return this->thanhtien;
        }
    public:
        char *ten;
        char *ID;
        float thanhtien;
        SP(){};
        ~SP(){};
        void NhapSP()
        {
            cout << "Nhap gia tien: "; cin >> this->donggia;
            cout << "Nhap so luong: "; cin >> this->soluong;
            this->tinhthanhtien();
        }
};
class hoadon
{
    private: 
        char *tenkhachhang;
        char *diachi;
        int soluong;
        float tongtien()
        {
            float S = 0;
            for (int i = 0; i < soluong ; i++)
            {
                S = S + sanpham[i].thanhtien;
            }
            tongtien1 = S;
            return this->tongtien1;
        }
    public:
        SP sanpham[10];
        // static int sosanpham;
        float tongtien1;
         hoadon()
        {
            tenkhachhang = new char[40];
            diachi = new char[40];
        };
        ~hoadon()
        {
            delete[] diachi;
            delete[] tenkhachhang;
        };
        hoadon(int n)
        {
            soluong = n;
        }
        hoadon(SP sp[], int soluong)
        {
            this->soluong = soluong;
            for (int i = 0; i < soluong; i++)
            {
                sanpham[i] = sp[i];
            }
        }
        void themsp()
        {
            sanpham[soluong].NhapSP();
            soluong++;
            tongtien();
        }
        friend istream &operator >> (istream &is, hoadon& hd)
        {
            cout << "Nhap ten khach hang: "; is.getline(hd.tenkhachhang, 20);
            cout << "Nhap dia chi khach hang: "; is.getline(hd.diachi, 20);
            return is;
        }
        friend ostream &operator << (ostream &os, hoadon hd)
        {
            cout << "Ten khach hang: " << hd.tenkhachhang << endl;
            cout << "Dia chi: " << hd.diachi << endl;
            return os;
        }
};
int main()
{
    hoadon HD(0);
    cin >> HD;
    cout << HD;
    int n;
    cout << "Nhap so luong sp: "; cin >> n;
    for (int i = 0; i < n; i++)
    {
        HD.themsp();
    }
    cout << "Tong tien thanh toan la: " << HD.tongtien1 << endl;
    return 0;
}

Mình mới xem qua, thắc mắc là mảng sanpham bạn khai báo và khởi tạo chỗ nào vậy?

1 Like
public:
            SP sanpham[10];

nó ở phần public của class hoadon ấy :V

Vấn đề bạn chẳng bao giờ gọi đến hàm (toán tử) nhập thì lấy gì nó nhập tên.

1 Like

dưới phần main mình có cin >> HD;
:v chương trình chạy bth
mà khi đánh tên khách hàng nó sẽ out ra

Bạn khởi tạo bằng hàm dựng hoadon(int n), mà trong này không hề có khởi tạo cho tenkhachhangdiachi.

Thêm nữa:
Bạn dùng đến class là đã dùng đến hướng đối tượng (OOP), bạn nên làm theo hướng đối tượng. Bạn “chia năm xẻ bảy” thế kia thì làm theo hướng chức năng và cấu trúc thì hơn.

3 Likes

à rồi :V cảm ơn nha cần cấp phát động 2 cái đó ở hoadon(int n);
Cái này mình làm thử đề kiểm tra cuối kỳ á
Nó cái đề nó yêu cầu làm nhiều phần khác nhau
Mà cảm ơn lời khuyên của bạn nha để mình xem lại

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