30/09/2018, 18:17
xoá bộ đệm bằng if(fgets(string, size, stdin) != NULL);
#include <stdio.h>
#include <string.h>
int main()
{
int age;
char name [256];
printf ("Insert your age: ");
scanf("%d",&age);
if (fgets (name,256,stdin) != NULL); //xoa bo dem
printf ("Insert your name: ");
fgets (name,256,stdin);
name[strlen(name)-1] = ' ';
printf ("Your name is: %s and you are %d years oldn",name, age);
return 0;
}
Nếu không có if(fgets (name,256,stdin) != NULL);
thì name sẽ nhận
và gây ra kết quả không mong muốn.
Nhưng em không hiểu dòng lệnh trên hoạt động ra sao và tại sao lại như vậy, mong mọi người giải thích
Bài liên quan
Thực ra xóa câu lệnh
'\n'
ở đó không cầnif
khi đọc xong số VD: 123’\n’
thì sau khi đọc
scanf
vị trị đọc dữ liệu đang dừng ở trước ’\n'
khi bạn ấn [enter] và fgets (trong if) sẽ đọc sang dòng mới. Sau đó fgets sau sẽ đọc đúngTrên http://www.cplusplus.com/reference/cstdio/fgets/ có đoạn:
Như vậy fgets sẽ đọc stdin đến end-of-file hoặc đọc đủ số ký tự thì dừng lại, riêng đến \n thì dừng lại nhưng có đọc luôn cả \n vào name, thế là stdin đã qua \n và không sợ bị lỗi nữa.