Deutsch English Français Italiano |
<v4m3m0$3ul56$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!feed.opticnetworks.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Malcolm McLean <malcolm.arthur.mclean@gmail.com> Newsgroups: comp.lang.c Subject: Re: Whaddaya think? Date: Sun, 16 Jun 2024 08:19:28 +0100 Organization: A noiseless patient Spider Lines: 47 Message-ID: <v4m3m0$3ul56$1@dont-email.me> References: <666ded36$0$958$882e4bbb@reader.netnews.com> <20240616015649.000051a0@yahoo.com> <v4lm16$3s87h$4@dont-email.me> <v4lmso$3sl7n$1@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Sun, 16 Jun 2024 09:19:29 +0200 (CEST) Injection-Info: dont-email.me; posting-host="8103e7298be6c569bc7cbc2d3a1ab070"; logging-data="4150438"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19fPrWfQNt+3Hy0M3Id0ZtuKbhLlWVAyUY=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:JaDo4VXilcvO01jAUrtFdAKOuI4= Content-Language: en-GB In-Reply-To: <v4lmso$3sl7n$1@dont-email.me> Bytes: 2622 On 16/06/2024 04:41, Janis Papanagnou wrote: > On 16.06.2024 05:26, Lawrence D'Oliveiro wrote: >> On Sun, 16 Jun 2024 01:56:49 +0300, Michael S wrote: >> >>> If you want to preserve you sanity, never use fscanf(). >> >> Quoth the man page <https://manpages.debian.org/3/scanf.3.en.html>: >> >> It is very difficult to use these functions correctly, and it is >> preferable to read entire lines with fgets(3) or getline(3) and >> parse them later with sscanf(3) or more specialized functions such >> as strtol(3). > > This would be also my first impulse, but you'd have to know > _in advance_ how long the data stream would be; the function > requires an existing buffer. So you'd anyway need a stepwise > input. On the plus side there's maybe a better performance > to read large buffer junks and compose them on demand? But > a problem is the potential cut of the string of a number; it > requires additional clumsy handling. So it might anyway be > better (i.e. much more convenient) to use fscanf() ? > > Janis > Try this psuedo - code) tempfp = tmpfile(); while ((ch = fgetc(fp) != EOF) { if (isidigit(ch)) { ungetc(ch, fp); x = parsenumber(fp); fwrite(&x, sizeof(int), 1, tenpfp); N++; } } answer = malloc(N * sizeof(int)) fessek(tempfp, 0, SEEK_SET); fread(answer, N, sizeof(int), tempfp); reverse(answer, N); -- Check out my hobby project. http://malcolmmclean.github.io/babyxrc