Tại sao mình không nhập được họ tên, sử dụng hàm gets nhưng nó bỏ qua?

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

struct hoso {
	char hoten[30] ;
	int ngay ;
	int thang ;
	int nam ;
	int diem ;
	char quequan[30] ;
	
};

hoso nhaphoso() 
{
	hoso a  ;
    printf("Nhap ho ten :") ;
    gets(a.hoten) ;
    printf("Nhap ngay/thang/nam sinh :") ;
    scanf("%d%d%d",&a.ngay,&a.thang,&a.nam) ;
    printf("Nhap diem dau vao :") ;
    scanf("%d",&a.diem) ;
    printf("Nhap que quan :") ;
    gets(a.quequan) ;
    return a ;
}

int nhap()
{
	int n ;
	do {
		printf("Nhap n sinh vien :") ;
		scanf("%d",&n) ;
	}while(n <= 0) ;
	return n ;
}

void xuat(int n) 
{
	for (int i = 1 ; i <= n ; i++) {
		hoso a ;
		printf("Nhap sinh vien thu %d \n",i) ;
		nhaphoso(a) ;
		printf("Ho va ten : %s\n",a.hoten) ;
		printf("Ngay/thang/nam sinh : %d/%d/%d\n",a.ngay,a.thang,a.nam) ;
		printf("Que quan quan: %s\n",a.quequan) ;
		printf("Diem dau vao : %d\n",a.diem) ;
	}
}

int main()
{
     int n ;
     n = nhap() ;
     xuat(n) ;
     

}

bạn thiếu lệnh fflush(stdin); trước câu lệnh gets. Công dụng của nó như thế nào thì bạn nên tự tìm hiểu

2018 rồi mà vẫn khuyên người ta dùng fflush(stdin) à :flushed:

Phải là fflush(stdout).

2 Likes

Bạn dùng cin.ignore() trước gets(a.hoten) để xóa bộ nhớ đệm bàn phím

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

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