30/09/2018, 17:02

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;
}
Minh Hoàng viết 19:14 ngày 30/09/2018

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.

phanhoi[i]=(feedback*)malloc(sizeof(feedback));

p/s: bạn nên viết thành từng hàm. Dễ tìm lỗi hơn

Daisy viết 19:13 ngày 30/09/2018

Cám ơn bạn ^^ Mình đang chỉnh lại.

Bài liên quan
0