Tại sao sài fgets nhưng nó xuất dòng cuối cùng thêm một dòng nữa

file : cong hoa xa hoi chu nghia
       doc lap tu do
output : cong hoa xa hoi chu nghia
             doc lap tu do
             doc lap tu do 

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int demtu(char s[]) 
{
	if(s == '\0')   return 0 ;
	else {
	   int dem = 0 ;	
	   for(int i = 0 ; i < strlen(s) ; i++) {
		    if(s[i] == ' ') {
		    	dem++ ;
			}
	   }
	   return dem+1 ;
    }
}

void docfile(char tenfile[],char s[]) 
{
	FILE *f=fopen(tenfile,"r") ;
	if(f != NULL) {
		int dem = 0 ;
		while(feof(f) == 0) {
			fgets(s,80,f) ;
			printf("%s",s) ;
			dem = dem + demtu(s) ;
		}
		printf("kq : %d",dem) ;
		fclose(f) ;
	}
	else 
	    printf("Loi khong mo duoc file") ;
}


int main()
{
	char s[100] ;
	docfile("text.txt",s) ;
}

Thử thay điều kiện vòng lặp:

		while(fgets(s,80,f) != NULL) {
			printf("%s",s) ;
			dem = dem + demtu(s) ;
		}

Tuy nhiên so sánh với NULL không chuẩn xác lắm, vì khi hết tập tin hoặc xảy ra lỗi nó đều trả về NULL. Tham khảo: https://stackoverflow.com/a/15485689/10702045

1 Like

được rồi , cảm ơn bạn :3

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