Zastanawialem sie ostatnio czemu feof() nie jest dobrym straznikiem petli i zaczalem odkrywac funkcje I/O na nowo, a taka ciekawostke wydobylem ostatnio :

Kod:
	int n;

	while(1) {
		printf("enter a number: ");
		if(scanf("%d", &n) == 1)
			break;
		printf("try again: ");
	}

	printf("you typed %d\n", n);
W wolnym tlumaczeniu chodzi tu o to ze funkcja scanf ma ustawiony znacznik formatowania na int, a co jesli odczyta char? No wlasnie, bedzie konflikt konwersji, ktory spowoduje brak przesuniecia po buforze danych. Czyli jesli zamiast 123 wprowadze abc, to bufor tkwil bedzie caly czas na znaku 'a' - a funkcja scanf() bedzie przekonana ze 'a' to dopiero co wprowadzona wartosc, ktora z racji tego ze jest bledna - bedzie musiala byc wprowadzona na nowo i znowu i znowu i znowu.. Tyle ze nikt nie bedzie mogl juz tej wartosci wprowadzic na nowo bo petla juz wczesniej 'poszla w tango'.

Moze komus sie przyda.

Pozdro.