Scanf("%[^\n]",s) và gets(s) trong c

Cho e hỏi 2 hàm này khác nhau như thế nào và cách tốt nhất để nhập vào 1 chuỗi có cả khoảng trắng trong c ? Và %[^\n] sử dụng vào những trường hợp nào ?

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