On Tue, Jun 07, 2005 at 08:37:36PM +0700, php-coder wrote: > Вот заметил тут, что простейший примерчик на Сях работает очень > странно, и даже, прямо таки скажем, неожиданно. Дело в том, что > считывается лишняя строчка, т.е. последння строка файла по неведомой > мне причине считывается дважды. > > [c0der@mycomp ~]$ cat test.c > #include > int main() > { > char str[100]; > FILE *fd; > > fd = fopen("test.txt", "r"); > > while(! (feof(fd))) { > fscanf(fd, "%s", str); > printf("%s\n", str); > } > fclose(fd); > > return 0; > } > > [c0der@mycomp ~]$ cat test.txt > 1 > 2 > 3 > [c0der@mycomp ~]$ ./test > 1 > 2 > 3 > 3 > > Объясните что происходит, пожалуйста.. :-) Происходит непонимание стандартной библиотеки языка C. Вы сначала проверяете состояние потока, а потом читаете из потока и используете якобы прочитанное без проверки результата операции чтения. Для прояснения картины добавьте memset(str,0,sizeof str) перед вызовом fscanf(). И вообще, не используйте fscanf() таким образом. -- ldv