30/09/2018, 16:36

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)

NOName viết 18:52 ngày 30/09/2018

không ai giúp được mình sao

*grab popcorn* viết 18:50 ngày 30/09/2018

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

Bài liên quan
0