30/09/2018, 22:07
Hỏi về hàm gets và fgets trong C
mọi người giúp em về hàm fgets trong C với
lúc em dùng hàm gets(tentaptin)
thì stdin
lưu vào tentaptin
bình thường mà chạy vẫn ngon lành
Khi em dungfgets(tentaptin,40,stdin)
thì stdin
vẫn lưu vào đc tentaptin
mà khi fopen
thì lại báo lỗi không mở đc file. Em vẫn không hiểu dù đã chạy f11 để xem chi tiết. Mọi người giải thích hộ em
void OpenCloseFile(char tentaptin[])
{
FILE *fp; //file pointer
fp = fopen(tentaptin, "wt");
if (fp == NULL)
printf("Loi mo file
");
else
{
fprintf(fp, "Que huong la chum khe ngot
");
fputs("Cho con treo hai moi ngay
", fp);
fclose(fp);
printf("Da luu file thanh cong");
}
}`
void main()
{
char tentaptin[50]
printf("Moi nhap duong dan va ten tap tin: ");
fgets(tentaptin, 40, stdin); //báo lỗi không mở được file
//gets(tentaptin); chay bt
OpenCloseFile(tentaptin);
}
Bài liên quan
Vì
gets
đọc chuỗi từstdin
tới khi gặp ký tự newline\n
nhưng không đọc nó vào chuỗi, cònfgets
đọc luôn cả\n
vào chuỗi. Giả sửtentaptin
là"file_name.txt"
thìgets
đọc vào chuỗi"file_name.txt"
cònfgets
đọc vào chuỗi"file_name.txt\n"
Cảm ơn anh em hiểu r. Vậy là lúc mình
enter
thì nó cũng hiểu là mình\n
phải không anh. Với lại anh cho em hỏi là mình dùng hàmfgets
thay choscanf
thì có cần để ý gì không hay là dùng thoải mái lúc nào cũng được. Em cảm ơnKhi em bấm
Enter
làstdin
sẽ nhận vào ký tự'\n'
. Em dùng hàmscanf
để nhập chuỗi thì nó sẽ kết thúc khi gặp các ký tự trắng nhưspace
,enter
,… tức là chỉ đọc được các chuỗi ký tự không chứa các ký tự khoảng trắng, cònfget
nó sẽ chỉ dừng khi gặp'\n'
bao gồm cả các ký tự khoảng trắng, một lưu ý nữa làfget
yêu cầu phải có kích thước mảng lưu trữ, cònscanf
thì không, nênfgets
an toàn hơnscanf
haygets
.cảm ơn a thông não r