Cấu trúc thứ ba trong một loạt các cấu trúc là một đặt ở vị trí thứ ba trong mảng, ví dụ, một với chỉ số 2.
Trong của bạn (mã xấu xí), invtry
được khai báo là một mảng (có kích thước SIZE
) của các cấu trúc loại type
. Do đó invtry[0]
là phần tử đầu tiên, invtry[1]
thứ hai và invtry[2]
giả định thứ ba, tất nhiên, SIZE >= 3
.
Thông thường, bạn sẽ viết:
struct type{
char item[40];
double cost;
double retail;
int on_hand;
int lead_time;
};
const int SIZE = 500;
type invtry[SIZE];
này đồng nghĩa với những gì bạn đã viết, ngoại trừ định nghĩa của SIZE
tất nhiên. Nhưng nó dẫn đến sự nhầm lẫn ít hơn - trong một phần bạn nói những gì một type
(tên khủng khiếp cho cấu trúc!) Là - nói cách khác, bạn xác định loại type
. Sau đó, bạn tạo một loạt các cấu trúc thuộc loại type
, được gọi là invtry
.
Làm điều này trong cùng một dòng, như tác giả đã làm, chỉ đơn giản là khủng khiếp - với đôi mắt của tôi.
Bây giờ bạn có một loạt 500 cấu trúc. Nếu "loại" là "Sản phẩm", bạn sẽ có một mảng đại diện cho 500 sản phẩm. Mỗi mục có mục, chi phí, bán lẻ, v.v.
Để truy cập cấu trúc thứ ba trong mảng, hãy viết invtry[2]
. để truy cập vào trường on_hand
cụ thể của nó, hãy viết invtry[2].on_hand
. Điều này không liên quan gì đến vị trí cụ thể của on_hand
trong bố cục của loại được xác định.
Nếu bạn muốn lead_time của cấu trúc thứ ba, trước tiên hãy truy cập vào cấu trúc thứ ba và sau đó là thành viên lead_time
: invtry[2].lead_time
.
Tất nhiên vì loại không có hàm tạo mặc định (không tham số), 500 sản phẩm không được khởi tạo - bạn có rác trong đó. Nhưng đó là vấn đề của bạn.
Tôi nghĩ hầu hết mọi người đều coi thường những cuốn sách của Schildt… – hbw
Yup, và đây là một lý do. Bạn phải lập chỉ mục tên mảng, chứ không phải tên cấu trúc. Anh ta có mã đúng nhưng sai lệch. Trong ví dụ, 'invtry' là tên mảng và' type' tên cấu trúc. Theo logic của mình, mã phải là 'cout << type [2] .on_hand'. – MSalters
Nếu bạn hỏi tôi, việc xác định loại và khai báo mảng cùng loại là "không" ở vị trí đầu tiên. –