Tại sao code chạy bỏ qua dòng?

Em là newbie em mới học về code C
Chương trình em chạy được nhưng tại sao nó lại bỏ dòng Full Name ạ, không nhập dữ liệu vào đó được. Mong mn giải đáp

#include <stdio.h>
#include <conio.h>
struct SinhVien{
    char Name[30];
    char gt[5];
    char ID[8];
    float dA, dB;
    float avg = 0;
};
struct SinhVien A[100];
void main()
{
    int n, i;
    do
    {
        printf("\nNumber of student:");
        scanf_s("%d", &n);
    } while (n <= 0);
    SinhVien a[100];
    for (i = 0; i < n; i++)
    {
        printf("Full Name:");
        gets_s(A[i].Name);
        printf("\nID :");
        gets_s(A[i].ID);
        printf("\nSex: ");
        gets_s(A[i].gt);
        printf("\nScore midterm: ");
        scanf_s("%.2f",&A[i].dA);
        printf("\nScore final: %.2f");
        scanf_s("%.2f",&A[i].dB);
    }
    _getch();
}

Mình không làm về C nhưng thi thoảng lướt diễn đàn thấy anh em khác kêu phải xóa buffer ấy.
Hình như dùng hàm fflush(stdin)

1 Like

Hàm này SAI.

3 Likes

Như @Hoang_Nam_Le1 có đề cập, cậu cần clear buffer sau mỗi lần dùng scanf, do dấu enter ở trong buffer sẽ không được đọc bởi scanf, dẫn tới gets đọc nó.
Tuy nhiên, cậu không nên dùng fflush(stdin). Dưới đây là một cách đơn giản để cậu clear buffer, cậu thêm dòng này vào sau mỗi dòng scanf_s nhé:

while(getchar() != '\n');
4 Likes

Oke mình sửa được rồi cám ơn nhéee

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