30/09/2018, 21:36

Sự khác biệt giữa %1s và %c trong C

Code 1:

int main()
{
    int a;
    printf("Enter the a = ");
    scanf("%d", &a);
    char characters[2];
    printf("Enter the one characters: ");
    scanf("%1s", characters);
}

Code 2:

int main()
{
    int a;
    printf("Enter the a = ");
    scanf("%d", &a);
    char characters[2];
    printf("Enter the one characters: ");
    scanf("%c", characters);
}

Cho em hỏi là hai đoạn code trên em đều cho nhập vào 1 kí tự nhưng sao ở đoạn code 1 thì không bị trôi lệnh (tức khi nhập a rồi Enter thì vẫn nhập tiếp ký tự được), còn đoạn code 2 thì nhập a xong Enter là nó kết thúc luôn ? Em đang thắc mắc, mong các anh chị giải thích hộ, em cảm ơn ạ

viết 23:47 ngày 30/09/2018

Sau khi scanf("%d",&a) thì trong buffer còn lại ký tự '\n'. Code 1: scanf("%1s....) sẽ bỏ qua những kí tự như khoảng trắng hay '\n' nên không bị trôi ký tự. Code 2: scanf("%c... sẽ đọc luôn '\n' nên bị trôi ký tự. Bạn tham khảo thêm trong cuốn K&R

Phạm Minh Anh Hữu viết 23:40 ngày 30/09/2018

Cảm ơn @freedom nhé

Bài liên quan
0