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("\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)

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(…);

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?