Phần này sẽ khó khăn hơn so với Hàm Xuất.
Hàm xuất thông
tin 1 sinh viên đơn giản là in thông tin sinh viên đó, vì vậy trong hàm
xuatSinhVien(SinhVien a[], int n) chúng ta chỉ cần gọi hàm xuất thông
tin 1 sinh viên trong mỗi vòng lặp là toàn bộ thông tin sẽ được in ra.
Với
hàm nhập có đôi chút khác biệt, trong phiên bản 2, mỗi vòng lặp sau hàm
fgets() chúng ta cần sử dụng hàm strndup() để sao chép giá trị.
Chúng ta sẽ viết trước hàm nhap(SinhVien x)
để nhập thông tin 1 sinh viên. Đại khái chúng ta sẻ hỏi từng thông tin,
sau đó người dùng sẽ nhập thông tin và câu hỏi tiếp theo sẽ hiện lên,
cứ vậy cho đến khi xong.
Đây là phác họa, chúng ta sẽ sửa lại một chút, chúng ta sẽ sử dụng con trỏ, hàm sẽ trở thành nhap(SinhVien *x)
void nhap(SinhVien x){
cout <<"Nhap ten : "<< endl;
getline(cin, x->hoten);
cout <<"Nhap email : " << endl;
getline(cin, x->email);
cout <<"Nhap dia chi : " << endl;
getline(cin, x->diaChi);
cout <<"Nhap nganh hoc : " << endl;
getline(cin, x->chuyenNganh);
cout <<"Nhap diem trung binh : " << endl;
cin >> x->diemTrungBinh;
}
Bây giờ chương trình của chúng ta sẽ như sau
#include <iostream>
#include <string>
using namespace std;
struct SinhVien{
string hoten;
string email;
string diaChi;
string chuyenNganh;
double diemTrungBinh;
};
typedef struct SinhVien SinhVien;
void nhap(SinhVien *x);
void nhapSinhVien(SinhVien a[], int n);
void xuat(SinhVien x);
void xuatSinhVien(SinhVien a[], int n);
int main()
{
struct SinhVien sv[3] = {
{"Tran Van A", "tranvanA@email.com","123 HV Da Nang", "CNTT", 6.80},
{"Le Van B", "levanB@email.com","456 HV Da Nang", "CNTT", 7.80},
{"Nguyen Thi C", "nguyenthiC@email.com","789 HV Da Nang", "CNTT", 8.80}
};
xuatSinhVien(sv, 3);
//SinhVien x = sv[0];
//xuat(x);
return 0;
}
void nhap(SinhVien *x){
cout <<"Nhap ten : "<< endl;
getline(cin, x->hoten);
cout <<"Nhap email : " << endl;
getline(cin, x->email);
cout <<"Nhap dia chi : " << endl;
getline(cin, x->diaChi);
cout <<"Nhap nganh hoc : " << endl;
getline(cin, x->chuyenNganh);
cout <<"Nhap diem trung binh : " << endl;
cin >> x->diemTrungBinh;
}
void nhapSinhVien(SinhVien a[], int n){
}
void xuat(SinhVien x){
cout <<"------------------------" << endl;
cout <<"Ho ten : " << x.hoten << endl;
cout <<"Email : "<< x.email << endl;
cout <<"Dia chi : " << x.diaChi << endl;
cout <<"Chuyen nganh : " << x.chuyenNganh << endl;
cout <<"Diem trung binh : " << x.diemTrungBinh << endl;
cout <<"------------------------" << endl;
}
void xuatSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Thong tin sinh vien thu: " << i + 1<< endl;
xuat(a[i]);
}
}
Sử dụng IDE Online, chúng ta sẽ chạy thử chương trình
Chúng ta sẽ dùng vòng lặp For để nhập thông tin toàn bộ sinh viên trong hàm void nhapSinhVien(SinhVien a[], int n)
Đây là code của hàm:
void nhapSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Nhap thong tin cho sinh vien thu " << i + 1 << endl;
nhap(&a[i]);
}
}
Đến lúc này chương trình của chúng ta sẽ như sau:
#include <iostream>
#include <string>
using namespace std;
struct SinhVien{
string hoten;
string email;
string diaChi;
string chuyenNganh;
double diemTrungBinh;
};
typedef struct SinhVien SinhVien;
void nhap(SinhVien *x);
void nhapSinhVien(SinhVien a[], int n);
void xuat(SinhVien x);
void xuatSinhVien(SinhVien a[], int n);
int main()
{
struct SinhVien sv[3] = {
{"Tran Van A", "tranvanA@email.com","123 HV Da Nang", "CNTT", 6.80},
{"Le Van B", "levanB@email.com","456 HV Da Nang", "CNTT", 7.80},
{"Nguyen Thi C", "nguyenthiC@email.com","789 HV Da Nang", "CNTT", 8.80}
};
xuatSinhVien(sv, 3);
//SinhVien x = sv[0];
//xuat(x);
return 0;
}
void nhap(SinhVien *x){
cout <<"Nhap ten : "<< endl;
getline(cin, x->hoten);
cout <<"Nhap email : " << endl;
getline(cin, x->email);
cout <<"Nhap dia chi : " << endl;
getline(cin, x->diaChi);
cout <<"Nhap nganh hoc : " << endl;
getline(cin, x->chuyenNganh);
cout <<"Nhap diem trung binh : " << endl;
cin >> x->diemTrungBinh;
}
void nhapSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Nhap thong tin cho sinh vien thu " << i + 1 << endl;
nhap(&a[i]);
}
}
void xuat(SinhVien x){
cout <<"------------------------" << endl;
cout <<"Ho ten : " << x.hoten << endl;
cout <<"Email : "<< x.email << endl;
cout <<"Dia chi : " << x.diaChi << endl;
cout <<"Chuyen nganh : " << x.chuyenNganh << endl;
cout <<"Diem trung binh : " << x.diemTrungBinh << endl;
cout <<"------------------------" << endl;
}
void xuatSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Thong tin sinh vien thu: " << i + 1<< endl;
xuat(a[i]);
}
}
Bấm Run để chạy chương trình
Để chạy thử chương trình, chúng ta tạo thêm một biến kiểu SinhVien: SinhVien sv2[3];
Sau đó ta gọi hàm nhapSinhVien(SinhVien a[], int n) với int n giả định là 3: nhapSinhVien(sv2, 3);
Đây là code chương trình cho đến lúc này:
#include <iostream>Khi chạy thử chương trình chúng ta sẽ gặp tình trạng Trôi lệnh giống phiên bản 2, để khác phục, chúng ta sử dụng lệnh scanf("\n");
#include <string>
using namespace std;
struct SinhVien{
string hoten;
string email;
string diaChi;
string chuyenNganh;
double diemTrungBinh;
};
typedef struct SinhVien SinhVien;
void nhap(SinhVien *x);
void nhapSinhVien(SinhVien a[], int n);
void xuat(SinhVien x);
void xuatSinhVien(SinhVien a[], int n);
int main()
{
struct SinhVien sv[3] = {
{"Tran Van A", "tranvanA@email.com","123 HV Da Nang", "CNTT", 6.80},
{"Le Van B", "levanB@email.com","456 HV Da Nang", "CNTT", 7.80},
{"Nguyen Thi C", "nguyenthiC@email.com","789 HV Da Nang", "CNTT", 8.80}
};
SinhVien sv2[3];
nhapSinhVien(sv2, 3);
xuatSinhVien(sv2, 3);
//SinhVien x = sv[0];
//xuat(x);
return 0;
}
void nhap(SinhVien *x){
cout <<"Nhap ten : "<< endl;
getline(cin, x->hoten);
cout <<"Nhap email : " << endl;
getline(cin, x->email);
cout <<"Nhap dia chi : " << endl;
getline(cin, x->diaChi);
cout <<"Nhap nganh hoc : " << endl;
getline(cin, x->chuyenNganh);
cout <<"Nhap diem trung binh : " << endl;
cin >> x->diemTrungBinh;
}
void nhapSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Nhap thong tin cho sinh vien thu " << i + 1 << endl;
nhap(&a[i]);
}
}
void xuat(SinhVien x){
cout <<"------------------------" << endl;
cout <<"Ho ten : " << x.hoten << endl;
cout <<"Email : "<< x.email << endl;
cout <<"Dia chi : " << x.diaChi << endl;
cout <<"Chuyen nganh : " << x.chuyenNganh << endl;
cout <<"Diem trung binh : " << x.diemTrungBinh << endl;
cout <<"------------------------" << endl;
}
void xuatSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Thong tin sinh vien thu: " << i + 1<< endl;
xuat(a[i]);
}
}
Đồng thời sửa lại lệnh xuất: xuatSinhVien(sv2, 3);
Chạy thử chương trình, mọi thứ đã hoàn hảo.
Đây là code của chương trình
#include <iostream>
#include <string>
using namespace std;
struct SinhVien{
string hoten;
string email;
string diaChi;
string chuyenNganh;
double diemTrungBinh;
};
typedef struct SinhVien SinhVien;
void nhap(SinhVien *x);
void nhapSinhVien(SinhVien a[], int n);
void xuat(SinhVien x);
void xuatSinhVien(SinhVien a[], int n);
int main()
{
struct SinhVien sv[3] = {
{"Tran Van A", "tranvanA@email.com","123 HV Da Nang", "CNTT", 6.80},
{"Le Van B", "levanB@email.com","456 HV Da Nang", "CNTT", 7.80},
{"Nguyen Thi C", "nguyenthiC@email.com","789 HV Da Nang", "CNTT", 8.80}
};
SinhVien sv2[3];
nhapSinhVien(sv2, 3);
xuatSinhVien(sv2, 3);
//SinhVien x = sv[0];
//xuat(x);
return 0;
}
void nhap(SinhVien *x){
cout <<"Nhap ten : "<< endl;
scanf("\n");
getline(cin, x->hoten);
cout <<"Nhap email : " << endl;
getline(cin, x->email);
cout <<"Nhap dia chi : " << endl;
getline(cin, x->diaChi);
cout <<"Nhap nganh hoc : " << endl;
getline(cin, x->chuyenNganh);
cout <<"Nhap diem trung binh : " << endl;
cin >> x->diemTrungBinh;
}
void nhapSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Nhap thong tin cho sinh vien thu " << i + 1 << endl;
nhap(&a[i]);
}
}
void xuat(SinhVien x){
cout <<"------------------------" << endl;
cout <<"Ho ten : " << x.hoten << endl;
cout <<"Email : "<< x.email << endl;
cout <<"Dia chi : " << x.diaChi << endl;
cout <<"Chuyen nganh : " << x.chuyenNganh << endl;
cout <<"Diem trung binh : " << x.diemTrungBinh << endl;
cout <<"------------------------" << endl;
}
void xuatSinhVien(SinhVien a[], int n){
for(int i = 0; i < n; i++){
cout <<"Thong tin sinh vien thu: " << i + 1<< endl;
xuat(a[i]);
}
}
Không có nhận xét nào:
Đăng nhận xét