Lỗi nhập xuất trong C

Cho e hỏi sao phần xuất ở sau chỗ MSHS lại có phần tên ạ?

#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct Date
{
    unsigned char ngay;
    unsigned char thang;
    int nam;
}Date;
typedef struct HOCSINH
{
    char MSHS[8];
    char hoten[31];
    Date ngaysinh;
    float diemtb;
}HS;

void NhapNamSinh(Date *d){
    printf("\nNhap vao ngay: ");scanf("%u",&d->ngay);
    printf("Nhap vao thang: ");scanf("%u",&d->thang);
    printf("Nhap vao nam: ");scanf("%d",&d->nam);
}

void XuatNamSinh(Date d){
    printf("%2u/%2u/%4d",d.ngay,d.thang,d.nam);
}

void Nhap1HS(HS *hs){
    printf("\nNhap MSHS: ");fflush(stdin);gets(hs->MSHS);
    printf("Nhap ho ten: ");fflush(stdin);gets(hs->hoten);
    printf("Nhap ngay thang nam sinh: ");
    NhapNamSinh(&hs->ngaysinh);
    printf("Nhap diem tb: ");scanf("%f",&hs->diemtb);
}

void NhapDSHS(HS hs[],int n){
    for(int i=1;i<=n;i++){
        printf("\nNhap vao thong tin hoc sinh thu %d: ",i);
        Nhap1HS(&hs[i]);
    }
}

void Xuat1HS(HS hs){
    printf("\nMSHS: %s",hs.MSHS);
    printf("\nHo va ten: %s",hs.hoten);
    printf("\nNgay thang nam sinh: ");XuatNamSinh(hs.ngaysinh);
    printf("\nDiem trung binh: %2.2f",hs.diemtb);
}

void XuatDSHS(HS hs[],int n){
    for(int i=1;i<=n;i++){
        printf("\nTong tin hoc sinh thu %d:",i);
        Xuat1HS(hs[i]);
    }
}

int main(){
    HS hs[50];
    int n;printf("Nhap so hoc sinh: ");
    scanf("%d",&n);
    NhapDSHS(hs,n);
    XuatDSHS(hs,n);
}

image

Bạn chỉnh lại trong cấu trúc HOCSINH thành char MSHS[9] mảng 9 ký tự, không phải 8. Hết bị vấn đề.
Bạn biết vì sai nó hết bị lỗi đó không?
Vì chuỗi trong C còn có thêm 1 kí tự kết thúc chuỗi nữa là '\0'.

4 Likes

được rồi ạ. Em cảm ơn

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