While (!feof(f)) dùng để làm gì?

void cau2()
{
	FILE*f;
	f=fopen("chuoi.inp","rt");
	char*s;
	s=new char[256];
	fprintf(g,"cau 2:\n",f);
	while(!feof(f))
	{
		fgets(s,256,f);
		int h=strlen(s)-1;
		fprintf(g,"%d\n",h);
	}
	fclose(f);
}

thì câu lệnh while(!feof(f)) dùng để làm gì ? đếm độ dài của chuỗi thì tại sao lại phải trừ đi 1 mới ra kết quả đúng trong dòng code int h=strlen(s)-1; vậy ạ ???

2 Likes

while (!eof(f)) theo mình hiểu nghĩa là khi nào chưa gặp kí tự kết thúc eof trong file thì sẽ còn thực hiện đọc kí tự có trong file. Còn -1 nghĩa là trừ đi kí tự kết thúc chuỗi (hình như là \n hả j ak).

2 Likes

eof = end of file
strlen(s)-1, do hàm fgets khi lấy bao gôm cả ký tự null ở cuối mỗi chuổi

1 Like

cảm ơn mọi người mà còn đoạn code này nó có tới 3 vòng lặp ai có thể giải thích cho mình ý nghĩa của từng vòng không ạ ?

void cau5()
{
	FILE *f;
	f=fopen("CHUOI.inp","rt");
	int h[256];
	fprintf(g,"CAU 5:\n");
	for(char i='a';i<='z';i++)
		h[i]=0;
	char l;
	while (!feof(f)) // eof nghia là end of file.
	{
		l=fgetc(f);
		if (l!=' ' && l!=10 && !feof(f))
		h[l]++;
	}
	for(char j='a';j<='z';j++)
		if (h[j]>0)
		fprintf(g,"%c xuat hien %d\n",j,h[j]);
	fclose(f);	
}

vòng for 1: khởi tạo số lần xuất hiện ‘a’ tới ‘z’ ở chuỗi h =0
vòng while 2: đếm các kí tự khi chưa kết thúc file, ngoại trừ ’ ', 10 và eof
vòng for 3: in ra các kí tự xuất hiện và số lần xuất hiện

char*tudainhat(char*s)
{
	if(s[strlen(s)-1]==10) s[strlen(s)-1]='\0';
	strcat(s," ");
	char*skq;
	skq=new char[256];
	int i=0,max=0;
	while(i<strlen(s))
	{
		int j=i;
		while(s[j]!=' ')j++;
		if(j-i+1>max)
		{
			max=j-i+1;
			int u=0;
			for(int k=i;k<j;k++)
			skq[u++]=s[k];
		}
			i=j+1;	
	}
		skq[max-1]='\0';
		return skq;
}

có ai rảnh không giải thích cho em dòng code này đi cảm ơn mọi người

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