Sử dụng mảng động và kiểu cấu trúc trong C
Đề: viết chương trình lấy ý kiến sinh viên, trong đó tạo qlist để nhập câu hỏi, qans để nhận câu trả lời và một feedback để sinh viên nhập câu trả lời + ý kiến về việc học tâp. Phía dưới là code của em. Em không biêt là mình đã sai chỗ nào mà khi chạy chương trinh thì nó không thể chạy hết được các câu lệnh em đưa ra.
Ví dụ: khi nhập vào danh sách x=2, i=0 vẫn hiện đầy đủ các dòng lệnh, i=1(tức là người thứ hai nhập thông tin) thì chỉ có thể nhập mã số sinh viên và trả lời câu hỏi thứ nhất.
Khi nhập x=5, thì chạy i=0, i=1 rồi chương trình dứng lại.
Mong mọi người giúp đỡ. Em cám ơn nhiều lắm. ^^
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define N 2
int main(){
struct question{
int stt;
char *cauhoi;
};
struct answer{
int stt;
char *traloi;
};
struct feedback{
char * mssv;
answer cautl[N];
char *ykien;
};
// nhap cau hoi:
question dsch[N]; //dsch: danh sach cau hoi
char tam[200];
for (int i=0; i<N; i++){
printf("nhap cau hoi thu %d: ", i+1);
dsch[i].stt=i+1;
fflush(stdin);
gets(tam);
dsch[i].cauhoi = strdup(tam);
printf("
");
}
fflush(stdin);
int x, i=0;
printf("nhap so sinh vien vao:
");
scanf("%d", &x);
// NHAN CAU TRA LOI VA Y KIEN CUA SV
feedback **phanhoi;
phanhoi = (feedback**)malloc(sizeof(feedback*) *x); // tao vung nho cua "phanhoi"
while(i<x){
// nhap ma so sv:
char maso[12];
printf("nhap ma so cua ban: ");
fflush(stdin);
gets(maso);
phanhoi[i]->mssv = strdup(maso);
printf("
hay tra loi cac cau hoi sau:
");
// nhan cau tl
int j=0;
while(j<2){
printf("cau hoi thu %d: %s", j+1, dsch[j].cauhoi);
char t[200]; // t la bien tam
printf("
cau tra loi cua ban la: ");
fflush(stdin);
gets(t);
phanhoi[i]->cautl[j].traloi= strdup(t);
printf("
");
j++;
}
//nhap y kien
char temp[200];
printf("hay nhap nhan xet cua ban la:
");
fflush(stdin);
gets(temp);
phanhoi[i]->ykien= strdup(temp);
i++;
}
// giai phong vung nho
for(int i=0; i<N; i++) {
free(dsch[i].cauhoi);
free(phanhoi[i]->cautl);
}
for(int i=0; i<x; i++)
{
free(phanhoi[i]->ykien);
free(phanhoi[i]->mssv);
}
return 0;
}
bạn phải cấp phát cho từng phần tử của array phanhoi. Bạn mới chỉ cấp phát một vùng nhớ lớn, chưa cấp phát cụ thể từng phần tử.
thêm trước khi nhập mssv.
p/s: bạn nên viết thành từng hàm. Dễ tìm lỗi hơn
Cám ơn bạn ^^ Mình đang chỉnh lại.