Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #95673

Re: scanf used for to get a line

From Keith Thompson <kst-u@mib.org>
Newsgroups comp.lang.c
Subject Re: scanf used for to get a line
Date 2016-11-03 11:29 -0700
Organization None to speak of
Message-ID <lnbmxwzab8.fsf@kst-u.example.com> (permalink)
References <15ea8d6d-0173-491c-b6b5-b1c57dd61769@googlegroups.com> <236c25a6-8c18-4082-ab3a-86eb55fb2408@googlegroups.com> <nvfoa6$lsu$1@dont-email.me> <lnfun8zffj.fsf@kst-u.example.com> <5e06af91-eec8-42cd-87c4-99d2b448de84@googlegroups.com>

Show all headers | View raw


supercat@casperkitty.com writes:
> On Thursday, November 3, 2016 at 11:38:40 AM UTC-5, Keith Thompson wrote:
>> But be careful.  sscanf() has undefined behavior on numeric overflow.
>
> If one wanted to write the simplest strictly-conforming program that would
> e.g. read a line of input from stdin and:
>
>   1. If the input contains two signed numbers separated by a space, both
>      within the range of "long long", and their product is also within the
>      range of that type, output their product.
>
>   2. In all other cases, output any sequence of 0 to 1,000 characters and
>      exit.
>
> How should one make that program most simply?

I'd use strtoll() to parse the numbers.  I find its interface a bit
clunky, but it does let you unambiguously determine whether the numbers
are in range (you need to set and test errno).

Determining whether their product is representable is a bit tricker, but
I have no doubt that it's been solved.  A Google search for existing
solutions would probably be faster than writing a solution from scratch.
I'm not sure why you introduced this irrelevant requirement.

I don't know why your requirement #2 is so loose.  It's easy enough to
print, say, "ERROR" on stderr.

(Incidentally, I intensely dislike the fact that numeric overflow in
scanf() has undefined behavior.  It's clearly not accidental, but I'd
love to see it changed in the next edition of the standard.  Libraries
already have to be able to parse numbers while reliably detecting
numeric overflow; see the strto*() functions.)

[...]

-- 
Keith Thompson (The_Other_Keith) kst-u@mib.org  <http://www.ghoti.net/~kst>
Working, but not speaking, for JetHead Development, Inc.
"We must do something.  This is something.  Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

scanf used for to get a line asetofsymbols@gmail.com - 2016-11-01 01:50 -0700
  scanf used for to get a line asetofsymbols@gmail.com - 2016-11-01 01:55 -0700
  Re: scanf used for to get a line mark.bluemel@gmail.com - 2016-11-01 03:55 -0700
    Re: scanf used for to get a line "Charles Richmond" <numerist@aquaporin4.com> - 2016-11-03 11:23 -0500
      Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-03 09:38 -0700
        Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-03 10:08 -0700
          Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-03 11:29 -0700
            Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-03 14:37 -0700
              Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-03 16:34 -0700
                Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-04 10:21 -0700
                Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-04 11:46 -0700
                Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-04 15:04 -0700
                Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-04 16:44 -0700
                Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-04 17:13 -0700
                Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-04 19:12 -0700
                Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-05 14:10 -0700
                Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-05 14:22 -0700
          Re: scanf used for to get a line Tim Rentsch <txr@alumni.caltech.edu> - 2016-11-15 10:57 -0800
            Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-15 12:05 -0800
              Re: scanf used for to get a line jameskuyper@verizon.net - 2016-11-15 14:01 -0800
              Re: scanf used for to get a line Tim Rentsch <txr@alumni.caltech.edu> - 2016-11-16 10:54 -0800
              Re: scanf used for to get a line Richard Damon <Richard@Damon-Family.org> - 2016-11-21 18:01 -0500
                Re: scanf used for to get a line supercat@casperkitty.com - 2016-11-21 15:44 -0800
      Re: scanf used for to get a line asetofsymbols@gmail.com - 2016-11-03 13:35 -0700
        Re: scanf used for to get a line Keith Thompson <kst-u@mib.org> - 2016-11-03 13:50 -0700
      Re: scanf used for to get a line ImperiusDamian <damianblack.wolf@gmail.com> - 2016-11-05 16:10 -0400
  Re: scanf used for to get a line Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-11-01 11:39 +0000
    Re: scanf used for to get a line asetofsymbols@gmail.com - 2016-11-01 05:47 -0700
      Re: scanf used for to get a line Ben Bacarisse <ben.usenet@bsb.me.uk> - 2016-11-01 15:05 +0000
        Re: scanf used for to get a line asetofsymbols@gmail.com - 2016-11-02 01:42 -0700

csiph-web