30/09/2018, 22:18
Giải thích giúp em lỗi này ạ
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
typedef struct{
int day;
int month;
int year;
}Date;
typedef struct{
string name;
Date birthday;
char role[20];
float salary;
}employee;
void InitStruct(employee *myemployee){
myemployee = new employee;
cout << "Name: ";
getline(cin, myemployee->name);
fflush(stdin);
cout << "Day of birth: ";
cin >> myemployee->birthday.day;
fflush(stdin);
cout << "Month of birth: ";
cin >> myemployee->birthday.month;
fflush(stdin);
cout << "Year of birth: ";
cin >> myemployee->birthday.year;
fflush(stdin);
cout << "Role: ";
cin >> myemployee->role;
fflush(stdin);
cout << "Salary: ";
cin >> myemployee->salary;
return;
}
void display(employee *myemployee){
cout << "Name: " << myemployee->name << endl;
cout << "Birthday: " << myemployee->birthday.day << "/" << myemployee->birthday.month << "/" << myemployee->birthday.year << endl;
cout << "Role: " << myemployee->role << endl;
cout << "Salary: " << myemployee->salary << endl;
return;
}
void main(){
employee *myemployee=NULL;
InitStruct(myemployee);
display(myemployee);
return;
}
* List item
Bài liên quan
Lỗi gì vậy?
p/s: đủ 20 kí tự.
Dạ không có lỗi nhưng nó không chạy đc ạ
Void main mà còn return nữa là sao. Cái này trên visual studio là báo lỗi liền.
Qua code của bạn thì ở function InitStruct bạn có khai báo 1 con trỏ, rồi bạn cấp phát bộ nhớ cho nó nhưng không ghi là cấp bao nhiêu
myemployee = new employee [<số lượng ô nhớ cần cấp>];
, là lỗi thứ nhất. Lỗi thứ 2 là bạn nhập vào danh sách mà không dùng vòng lặp để nhập.KHông báo lỗi ạ … em cũng đang dùng visual studio. nó chỉ chạy được phần nhập còn phần display thì k chạy đc
Thì Debug đi không biết debug à. Theo anh đoán là trong chương trình của em nó không lưu gì hết nên tới chỗ display nó bỏ qua luôn vì có gì đâu mà hiện.
con trỏ myemployee ở đây chỉ là một biến con trỏ thôi chứ không phải là con trỏ mảng nên mình nghĩ khai báo thế đúng rồi. Ý mình không hiểu ở đây là tại sao chương trình không thực thi hàm Display trong khi trình soạn thảo không báo lỗi
Thế thì phải làm thế này
Còn lỗi là do nó chưa được lưu vào đâu cả, nên không có gì để hiển thị => lỗi
Còn muốn nhập vào danh sách thì cứ cấp phát bộ nhớ cho nó rồi dùng for loop nhập như nhập mảng
Dạ. Em cảm ơn ạ. Mới học nên không hiểu lắm về cái vùng nhớ ạ
Nếu bạn muốn theo cách dùng con trỏ thì hàm này phải sửa thành:
Bởi vì con trỏ
myemployee
trong hàm main trỏ tới NULL, sau khi thực hiện hàmInitStruct
thìmyemployee
trỏ tới một vùng nhớ trên Heap, tức là thay đổi nội dung củamyemployee
thông qua hàmInitStruct
—> phải dùng con trỏ cấp 2. (Lưu ý nên giải phóng vùng nhớ được cấp phát động để tránh memory leak)Em mới hc C++. Trong sách em học không có đề cập con trỏ cấp hai nơi. Anh có thể chỉ em sách có liên quan để em nghiên cứu được không ạ. ( Đang mơ hồ lắm ạ )
Bạn có thể đọc cuốn Kỹ thuật lập trình C (GS. Phạm Văn Ất). Tuy nhiên cuốn này chỉ tham khảo thôi, vì phần thực hành dựa theo môi trường DOS nên một số hàm/thư viện không có. Về phần thực hành bạn thử làm mấy bài kiểu như cấp phát động mảng 1/2 chiều thông qua hàm, bài tập về danh sách liên kết,… code nhiều lên là mau thạo
Dạ em cảm ơn nhiều ạ
Thay vì dùng con trỏ cấp 2 thì có thể dùng reference được không anh.
Được chứ bạn, vì đang code C++ mà
Như thế sẽ đỡ rối hơn cho người mới học. vì khi dùng
void InitStruct(employee** myemployee)
hay nhầm lẫn ở dấu *