Nhờ xem giúp một bài tập về struct

Chào mọi người, hiện em đang có 1 bài tập trên trường nhưng em chạy code không được, em có code ở bên dưới, xin nhờ mọi người chỉ bảo, em cảm ơn !!!

ĐỀ BÀI

Nhập số nguyên dương n, nhập thông tin của n đối tác với các trường dữ liệu gồm: họ tên đối tác, chức vụ, công ty, số điện thoại, số cửa hàng, doanh thu bán hàng. Tổ chức thông tin n đối tác vào trong kiểu dữ liệu struct DanhBa với 2 trường dữ liệu: 1 mảng 1 chiều với 1000 phần tử là kiểu struct DoiTac, số lượng đối tác lưu trong danh bạ.

Thực hiện các công việc sau

a) Khai báo kiểu dữ liệu struct DoiTac dành cho đối tác

b) Khai báo kiểu dữ liệu struct DanhBa danh cho danh bạ

b) Nhập n và nhập các dữ liệu cho các trường của n đối tác, thứ tự nhập theo thứ tự các trường đã nêu trên.

b) In ra màn hình danh sách đối tác đã nhập theo dạng sau

stt|họ tên|chức vụ|công ty|số điện thoại|doanh số trung bình ;
với độ rộng cho từng trường thông tin là
3 24 20 24 16 16 (setw)

Căn lề in bên trái (left)

Chú ý: doanh thu trung bình là số nguyên và doanh thu có thể > 5 tỷ

Ví dụ

Input:

2
Tran Nam Tuan
Giam doc
SC Computer
0913112233
3
1500000000
Viet Cuong
Truong phong
Cong ty Thinh Vuong
0902115588
4
5000000000

Output:

1  |Tran Nam Tuan         |Giam doc               |SC Computer                  |0913112233      |500000000
2  |Viet Cuong                |Truong phong        |Cong ty Thinh Vuong     |0902115588      |1250000000 

Dưới đây là code của em

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <string>
#define MAX 1000

using namespace std;
struct DoiTac // kieu du lieu DoiTac
{
  string hoten;
  string congty;
  string chucvu;
  string sdt;
// Khai bao cac truong du lieu con lai
  string email;
  string diachi;
  int socuahang;
  long long int doanhthubanhang;
};

struct DanhBa
{
    struct DoiTac doitac[MAX];
    int soDoiTac;
};
int main()
{
	struct DanhBa db; // bien kieu struct DanhBa
	DoiTac doitac[MAX];
       // Nhap so luong doi tac
    cin >> db.soDoiTac;
    cin.ignore();
       // Nhap thong tin cho cac doi tac
       
	for(int i=1;i<=db.soDoiTac;i++)
	{
    fflush(stdin);
	getline(cin, doitac[i].hoten);
	fflush(stdin);
	getline(cin, doitac[i].chucvu);
	fflush(stdin);
	getline(cin, doitac[i].congty);
	fflush(stdin);
	getline(cin, doitac[i].sdt);
	fflush(stdin);
	getline(cin, doitac[i].email);
	fflush(stdin);
	getline(cin, doitac[i].diachi);
	cin >> doitac[i].socuahang >> doitac[i].doanhthubanhang;
	}

   

	// In thong tin cac doi tac ra man hinh
    for(int i=1;i<=db.soDoiTac;i++)
	{
	    cout << setw(3) << left << i << "|" << setw(24) << left << doitac[i].hoten<< "|";
        cout << setw(20) << left << doitac[i].chucvu<<"|" <<setw(24) << left << doitac[i].congty << endl << "|";
        cout << setw(16) << left << doitac[i].sdt << "|";
		cout << setw(16) << left << doitac[i].doanhthubanhang/doitac[i].socuahang<< endl;
	}
	
	return 0;
}

fflush(stdin) là một lệnh sai. Bạn bỏ hết fflush(stdin) đi.

Vấn đề là ở đây:

Bạn thêm vào sau dòng đó 2 dòng

string temp;
getline(cin, temp); // đọc những gì còn lại trên dòng vừa đọc (2 số),
// sẵn sàng để đọc 1 dòng mới

là được

4 Likes

dạ, em đã thử thêm 2 dòng code vào sau dòng cin nhưng khi em nhập tới dòng
Viet Cuong thì cửa sổ hiện ra như này ạ

Bạn để 2 dòng đó ở phía sau vòng lặp ấy :sweat_smile: Ở trong vòng lặp bạn vẫn đang đọc user input data theo đúng struct của nó mà, đọc xong rồi mới cần clear data stream bằng cách đọc data trong std::cin vào string 1 lần nữa.

2 Likes

Có phải như này không bạn, mình chạy không được :sweat_smile:

à xin lỗi bạn, mình hơi nhầm :smile: đặt trong vòng lặp là đúng rồi á, mình mới lấy code bạn chạy thử:

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
#include <string>
#define MAX 1000

using namespace std;
struct DoiTac // kieu du lieu DoiTac
{
  string hoten;
  string congty;
  string chucvu;
  string sdt;
// Khai bao cac truong du lieu con lai
  string email;
  string diachi;
  int socuahang;
  long long int doanhthubanhang;
};

struct DanhBa
{
    struct DoiTac doitac[MAX];
    int soDoiTac;
};
int main()
{
	struct DanhBa db; // bien kieu struct DanhBa
	DoiTac doitac[MAX];
       // Nhap so luong doi tac
    cin >> db.soDoiTac;
    cin.ignore();
       // Nhap thong tin cho cac doi tac
       
	for(int i=1;i<=db.soDoiTac;i++)
	{
    fflush(stdin);
	getline(cin, doitac[i].hoten);
	fflush(stdin);
	getline(cin, doitac[i].chucvu);
	fflush(stdin);
	getline(cin, doitac[i].congty);
	fflush(stdin);
	getline(cin, doitac[i].sdt);
	fflush(stdin);
	getline(cin, doitac[i].email);
	fflush(stdin);
	getline(cin, doitac[i].diachi);
	cin >> doitac[i].socuahang >> doitac[i].doanhthubanhang;
	std::string temp;
	std::getline(std::cin, temp);
	}

	// In thong tin cac doi tac ra man hinh
    for(int i=1;i<=db.soDoiTac;i++)
	{
	    cout << setw(3) << left << i << "|" << setw(24) << left << doitac[i].hoten<< "|";
        cout << setw(20) << left << doitac[i].chucvu<<"|" <<setw(24) << left << doitac[i].congty << endl << "|";
        cout << setw(16) << left << doitac[i].sdt << "|";
		cout << setw(16) << left << doitac[i].doanhthubanhang/doitac[i].socuahang<< endl;
	}
	
	return 0;
}

với input

2
ten
congty
chucvu
sdt
email
diachi
111
222
ten2
congty2
chucvu2
sdt2
email2
diachi2
1112
2222

kết quả in ra bình thường :smile:

3 Likes

Bạn coi lại phần input bạn nhập nha. Struct của bạn có 8 trường cho mỗi đối tác nhưng hình như bạn nhập vào có 7 trường, thiếu trường email.

3 Likes

mình nhập theo của bạn thì được, nhưng nhập theo đề bài nó lại không được
:frowning:

Vậy do đề bài in bị thiếu dòng nhập email rồi :smile: mạnh dạn sửa đề lại, hoặc bạn bỏ dòng nhập email trong code đi :sweat_smile:

2 Likes

à được rồi nha bạn ơi, mình làm ẩu quá, cảm ơn bạn nha

1 Like

dạ em cảm ơn anh !!!

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