Hàm đếm số dòng bị sai (Kết quả hàm demsodong trả về luôn là 0)

c

(Văn Pháp) #1
#include<stdio.h>
#include<conio.h>
void dem(FILE *fp)
{
	long dem=0;
	char word[128];
	while(!feof(fp))
	{
		int n=fscanf(fp,"%s",word);
		if(n>0)
			dem++;
		else
			break;
	}
	printf("so tu trong tap tin:%d",dem);
}
void demsodong(FILE *fp)
{
    long dem=1;
	char line[2048];
	while(fgets(line,2048-1,fp)!=NULL)
	{
		dem++;
	}
	printf("\nso luomg dong la %ld", dem);
}
void main()
{
	FILE *fp=fopen("data.txt","rt");                                          
	if(fp==NULL)
	{
		printf("file not found");
		return;
	}
	dem(fp);
	demsodong(fp);
	fclose(fp);
	getch();
}

(Quân) #2

Bạn dùng cùng một đối tượng file thì sau khi đọc xong ở hàm dem thì sẽ trỏ đến cuối file. Để sử dụng lại ở hàm demsodong thì phải move con trỏ file về lại đầu file


(Đỗ Đăng Khôi) #3
  • Bạn nên để prototype như sau :
void dem(const char *fileName);
void demsodong(const char *fileName);
  • Trong hàm demdemsodong bạn thực hiện mở file và đóng file.
  • Không đóng và mở file trong hàm main()

(Văn Pháp) #4

Chuẩn r. Thank 2 bạn nha.


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