Chương trình không thể in ra kết quả

Ai giúp em chỗ này được không ạ, e cho chạy chương trình mà nó k thể in ra

#include<stdio.h>
#include<stdlib.h>

struct HocSinh{
    char Ho_ten;
    int Tuoi;
    float Diem_TB;
};
typedef struct HocSinh HS;
struct Node{
    HS data;
    struct Node *pNext;
};
typedef struct Node NODE;
NODE *pHead = NULL;
NODE *pTail = NULL;
NODE *CapPhatNODE()
{
    int n;
    NODE *p = (NODE*)malloc(n * sizeof(NODE));
    if(p == NULL){
    return NULL;
    }
    return p;
}NODE *KhoiTaoNODE(char x, int y, float z){
    NODE *p = CapPhatNODE();
    p->pNext = NULL;
    p->data.Ho_ten = x;
    p->data.Tuoi = y;
    p->data.Diem_TB = z;
    return p;
}
void ThemVaoDau(char x, int y, float z){
    NODE *p = KhoiTaoNODE(x, y, z);
    if(pHead == NULL){
        pHead = pTail = p;
    }
    else{
        p->pNext = pHead;
        pHead = p;
    }
}
void ThemVaoCuoi(char x, int y, float z){
     NODE *p = KhoiTaoNODE(x, y, z);
    if(pHead == NULL){
        pHead = pTail = p;
    }
    else{
        pTail->pNext = p;
        pTail = p;
    }
}
void HamXuat()
{
    int count;
    for(NODE *p = pHead; p != NULL; p = p->pNext){
            count ++;
        printf("%-10d%-20s%-10d%0.2f\n", count, p->data.Ho_ten, p->data.Tuoi, p->data.Diem_TB);
        printf("\n");
    }
    printf("\n");
}
int main()
{
    int o;
    int n;
    int y;
    char x;
    float z;
    printf("1. Them hoc sinh vao dau danh sach\n");
    printf("2. Them hoc sinh vao cuoi danh sach\n");
    printf("3. Thoat chuong trinh\n");
    do{
    printf("Choose an option: ");
    scanf("%d", &o);
        switch(o){
        case 1:
            printf("Them hoc sinh vao dau danh sach\n");
             printf("Nhap so luong hoc sinh: ");
                scanf("%d", &n);
            for(int i = 1; i <= n; i++){
                    printf("Nhap vao thong tin hoc sinh thu %d\n", i);
                    printf("Ho va Ten: ");
                    fflush(stdin);
                    gets(&x);
                    printf("Tuoi: "); scanf("%d", &y);
                    printf("Diem TB: "); scanf("%f", &z);
                    ThemVaoDau(x, y, z);
            }
            printf("\n\n\t\tDANH SACH SINH VIEN\n");
            printf("%-10s%-20s%-10s%s", "STT", "Ho Ten", "Tuoi", "Diem TB");
            HamXuat();
            break;
        }
    }
    while(o != 3);
        if(o == 3){
            printf("Ban da thoat chuong trinh!");
        }
        return 0;
}

Bạn cho ví dụ nhập/xuất của bạn được không?

Xem sơ qua thì bạn đã sai trầm trọng ở:

Họ tên chỉ có 1 kí tự?!!

Nhưng khi nhập lại lấy dữ liệu kiểu chuỗi (char*)?

3 Likes

E sửa lại char thành mảng thì lại in được rồi ạ
Nhưng ở phần in họ tên nếu e ghi thành dạng mảng thì nó không in ra được, còn cho thành dạng mảng thì nó không in ra tên hoặc in ra 3 kí tự linh tinh gì đó nhưng các phần còn lại thì in ra được!
Ở phần char * thì do lỗi nó báo như vậy nên e mới dùng & đấy ạ

Phần sau là không phải dạng mảng ạ

Mảng kí tự không thể gán trực tiếp được, nhất là tham số của 1 hàm.
Đây là cách để gán:

char a[100];
char b[100];
gets(b);
strcpy(a, b); // "gán" b cho a

https://www.cplusplus.com/reference/cstring/strcpy/

1 Like

Vâng e cảm ơn ạ, để e sửa lại

À phần cấp phát bộ nhớ động a bảo e sai ở chỗ nào ạ, tại giờ e chỉ nhập được 1 người duy nhất, vừa mời đây thì nó lại được, e cảm giác lúc chạy được lúc không

n bằng bao nhiêu?

Vì lúc e làm bài kiểu số nguyên đơn thuần thì để n nó vẫn chạy ngon, Chỗ khác nhau duy nhất ở bài này vs bài số nguyên là e kết hợp hàm capphatnode với hàm khoitaonode lại, liệu có khác biệt j không ạ
Bài số nguyên thì e viết như này

NODE *khoiTaoNode(int x){
   int n;
   NODE* p = (NODE*)malloc(n * sizeof(NODE));
   if(p == NULL){
        return NULL;
    }
   p->pNext = NULL;
   p->data = x;
   return p;
}

Còn các phần khác không khác gì đâu ạ

do bạn không khởi tạo giá trị cho n.
Nên n lấy 1 giá trị bất kì. Sẽ có 2 trường hợp:
n vừa phải: chương trình của bạn có thể chạy
n rất lớn: sẽ bị tràn vùng HEAP. chương trình của bạn sẽ tèo, còn có thể ảnh hưởng tới cả system

3 Likes

Mình đang hỏi bạn n chỗ này đang bằng bao nhiêu?

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