Thắc mắc về bài tập C
#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("
Nhap thong tin thi sinh %d
", 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("
Ban da nhap sai khoi, moi ban nhap lai!
");
goto nhaplaikhoi;
}
else if (ds[i].tk == 'A' || ds[i].tk == 'a')
{
printf("
Nhap 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("
Nhap 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
");
printf("Ho ten Toan Ly Hoa");
printf("%c %0.1f %0.1f %0.1f
",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
");
printf("Ho ten Van Su Dia");
printf("%c %0.1f %0.1f %0.1f
",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)
không ai giúp được mình sao
ko nên dùng label và goto,
bạn nên xài do while
do {
getch(a);
} while (a!=‘a’ || a != ‘A’ …);
Còn muốn in A riêng, C riêng thì bạn tách ra 2 vòng lặp
printf(“Bảng điểm khối A\n”);
for(i=1;i<=n;i++) if (a==‘A’ || a==‘a’) printf(…);
printf(“Bảng điểm khối C\n”);
for(i=1;i<=n;i++) if (a==‘C’ || a==‘c’) printf(…);