Zliczyć znaki różne od a

0
  #define BLOCK 512 
main() { 
	char file[80]; 
	scanf("%c",file);
	 printf("%d", foo(open(file,0))) 
}
foo(fd1) int fd1; 
{
	 char buffer[BLOCK];
	 int a=0; while ((n = read(fd1, buffer, BLOCK)) > 0)
	{ 
		for (int i=0; i<BLOCK; ++i)
		{
			 if (buffer[i] != 'a'){ ++a; } 
		} 
	} return a; 
}

dlaczego tam gdzie jest użycie funkcji read poprawne jest:

(...) while ((n = read(fd1, buffer, BLOCK)) > 0)
{ 
	int i;
	 for (i=0; i<n; ++i)
	{
		 if (buffer[i] != 'x')
		{ ++x;} (...)

Przecież ona zwraca ilość przeczytanych bajtów czyli mogę co 512 robić to while'u dlaczego w pętli for mamy

i<n
0

a co zrobisz jeśli plik ma np. 1000 bajtów?
Pętla while odbiera z pliku bloki danych po 512 bajtów każdy.
Potem sprawdzasz pętlą for dla każdego znaku czy jest równa 'a'.
Jeśli masz plik o rozmiarze 1000 bajtów to najpierw odbierzesz 512, a przy drugim wykonaniu pętli while już tylko 488.
W dalszej części tablicy będą już tylko śmieci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1