30/09/2018, 16:51

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:
",f);
	while(!feof(f))
	{
		fgets(s,256,f);
		int h=strlen(s)-1;
		fprintf(g,"%d
",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 ạ ???

Nguyễn Trọng Phương viết 19:08 ngày 30/09/2018

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).

Nguyen Ca viết 19:03 ngày 30/09/2018

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

Vuơng Long Hoàng Vũ viết 18:59 ngày 30/09/2018

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);	
}
Minh Hoàng viết 18:52 ngày 30/09/2018

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

Vuơng Long Hoàng Vũ viết 18:56 ngày 30/09/2018
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

Bài liên quan
0