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);
        }
viết 00:20 ngày 01/10/2018

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òn fgets đọc luôn cả \n vào chuỗi. Giả sử tentaptin"file_name.txt" thì gets đọc vào chuỗi "file_name.txt" còn fgets đọc vào chuỗi "file_name.txt\n"

HoangNguyen viết 00:12 ngày 01/10/2018

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 cho scanf 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 ơn

viết 00:08 ngày 01/10/2018

Khi em bấm Enterstdin sẽ nhận vào ký tự '\n'. Em dùng hàm scanf để 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òn fget 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òn scanf thì không, nên fgets an toàn hơn scanf hay gets.

HoangNguyen viết 00:15 ngày 01/10/2018

cảm ơn a thông não r

Bài liên quan
0