From: Alexey Rusakov <ktirf@altlinux.ru> To: community@altlinux.ru Subject: Re: [Comm] [BUG] feof() Х ДСАКХПНБЮМХЕ ОНЯКЕДМЕИ ЯРПНЙХ Date: Tue, 07 Jun 2005 17:55:48 +0400 Message-ID: <42A5A764.9000705@altlinux.ru> (raw) In-Reply-To: <20050607133736.GA4274@mycomp.mydomain> php-coder wrote: > Доброго времени суток сообщество! > > Вот заметил тут, что простейший примерчик на Сях работает очень > странно, и даже, прямо таки скажем, неожиданно. Дело в том, что > считывается лишняя строчка, т.е. последння строка файла по неведомой > мне причине считывается дважды. > > [c0der@mycomp ~]$ cat test.c > #include <stdio.h> > 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; > } > > [...] > P.S. Проверил сегодня этот пример на Visual C++ 6.0 -- все работает > как и должно. Окончательно укоренился в мысли, что это бага. Если да, > то на какой пакет вешать? > > Для смеха можете повесить на glibc. Вряд ли она долго проживёт. И я бы не сказал, что Visual C++ 6.0 - это хороший эталон. И компилятору, и стандартной библиотеке - сто лет в обед, и огрехов там выше крыши. > Спасибо за внимание! > Не пользуйтесь fscanf - это опасно. Это во-первых. Касаемо вашего вопроса - после fscanf, упирающегося в конец файла, флаг конца файла не поднимается. Поднимается он тогда когда всё, что прочитал fscanf - это конец файла. А то, что вы посчитали повторно прочитанной строкой - это _старое_ значение переменной, которое fscanf не стал переписывать. Правильное использование - например, здесь: http://www.cs.utah.edu/~hamlet/release/lessons/c06/c06/node4.shtml (найдено через Google) -- Alexey "Ktirf" Rusakov
next prev parent reply other threads:[~2005-06-07 13:55 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2005-06-07 13:37 [Comm] [BUG] feof() и дублирование последней строки php-coder 2005-06-07 13:55 ` Alexey Rusakov [this message] 2005-06-07 13:59 ` Dmitry V. Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=42A5A764.9000705@altlinux.ru \ --to=ktirf@altlinux.ru \ --cc=community@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Community general discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 community community/ http://lore.altlinux.org/community \ mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com public-inbox-index community Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.community AGPL code for this site: git clone https://public-inbox.org/public-inbox.git