#include <stdio.h>
void main()
{
typedef struct
{
float toan, ly, hoa;
}khoi_a;
typedef struct
{
float van, su, dia;
}khoi_c;
typedef struct
{
char ht[25], tk;
union
{
khoi_a ka;
khoi_c kc;
}khoi;
}thi_sinh;
thi_sinh ds[1000];
float m1, m2, m3;
int i, n;
printf("Nhap so thi sinh: ");
scanf("%d", &n);
for(i=1; i<=n; i++)
{
fflush(stdin);
printf("\nNhap thong tin thi sinh %d\n", i);
printf("Nhap ho ten: ");
gets(ds[i].ht);
nhaplaikhoi:
printf("Nhap ten khoi A hoac C: ");
ds[i].tk = getch();
putch(ds[i].tk);
if(ds[i].tk != 'A' || ds[i].tk != 'a' || ds[i].tk != 'C' || ds[i].tk != 'c')
{
printf("\nBan da nhap sai khoi, moi ban nhap lai!\n");
goto nhaplaikhoi;
}
else if (ds[i].tk == 'A' || ds[i].tk == 'a')
{
printf("\nNhap diem toan, ly, hoa: ");
scanf("%f%f%f", &m1, &m2, &m3);
ds[i].khoi.ka.toan = m1;
ds[i].khoi.ka.ly = m2;
ds[i].khoi.ka.hoa = m3;
}
else
{
printf("\nNhap diem van, su, dia: ");
scanf("%f%f%f", &m1, &m2, &m3);
ds[i].khoi.kc.van = m1;
ds[i].khoi.kc.su = m2;
ds[i].khoi.kc.dia = m3;
}
}
for(i=1; i<=n; i++)
{
if(ds[i].tk == 'A' || ds[i].tk == 'a')
{
printf("Danh sach thi sinh thi khoi A\n");
printf("Ho ten\t\t Toan\t Ly\t Hoa");
printf("%c\t %0.1f\t %0.1f\t %0.1f\n",ds[i].ht, ds[i].khoi.ka.toan, ds[i].khoi.ka.ly, ds[i].khoi.ka.hoa);
}
else
{
printf("Danh sach thi sinh thi khoi C\n");
printf("Ho ten\t\t Van\t Su\t Dia");
printf("%c\t %0.1f\t %0.1f\t %0.1f\n",ds[i].ht, ds[i].khoi.kc.van, ds[i].khoi.kc.su, ds[i].khoi.kc.dia);
}
}
getch();
}
Đề bài là nhập điểm các môn thi theo khối và in ra màn hình danh sách điểm các môn khối A và khối C riêng.
Mình gặp một số lỗi nếu nhập sai khối thì sẽ quay lại để nhập lại tên khối ( ở đây mình dùng lệnh goto nhưng nó ở trong vòng lặp for nên không ổn). Vấn đề nữa là làm sao để xuất ra khối A một bảng riêng mà khối C một bảng riêng. Code ở trên là mình viết vẫn chạy nhưng không làm theo ý muốn của mình. Ai biết làm vào sửa lỗi code hộ mình với. Tks mọi người. ( Mình mới học lập trình C và viết bằng codeblock)
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?