From: "Trevor Woollacott" <trevorw@pharos-avantgard.com>
To: linux-c-programming@vger.kernel.org, Kaushik.Sarkar@netapp.com
Subject: RE: What compiler is doing when we pass unnecessary parameters in scanf
Date: Wed, 29 Jul 2009 18:02:22 +0200 [thread overview]
Message-ID: <009701ca1065$f784d760$706bd90a@mtn.co.za> (raw)
> -----Original Message-----
> From: linux-c-programming-owner@vger.kernel.org [mailto:linux-c-
> programming-owner@vger.kernel.org] On Behalf Of RAM_LOCK
> Sent: Wednesday, 29 July 2009 04:19 PM
> To: linux-c-programming@vger.kernel.org
> Subject: What compiler is doing when we pass unnecessary parameters in
> scanf
>
>
> Hi,
> In the second scenario what value is it printing when i have given
> extra
> parameter in scanf?
> Does it vary from compiler to compiler?
>
> Scenario : I
> -------------
> root@kaushik_Fedora11 ~/C/LET_US_C/ch-1> cat simple-interest.c
> #include <stdio.h>
>
> void main ()
> {
> int p;
> float i=0;
> printf ("enter the principal amount\n");
> scanf ("%d",&p);
> i = (p*5*5)/100;
> printf ("Interterest is : %f\n",i);
> }
> root@kaushik_Fedora11 ~/C/LET_US_C/ch-1> ./a.out
> enter the principal amount
> 100
> Interterest is : 25.000000
>
>
> Scenario : II
> -------------
> > cat simple-interest.c
> #include <stdio.h>
>
> void main ()
> {
> int p;
> float i=0;
> printf ("enter the principal amount\n");
> scanf ("p:%d",&p);
> i = (p*5*5)/100;
> printf ("Interterest is : %f\n",i);
> }
> root@kaushik_Fedora11 ~/C/LET_US_C/ch-1> ./a.out
> enter the principal amount
> 100
> Interterest is : -9321198.000000
>
> --
> View this message in context: http://www.nabble.com/What-compiler-is-
> doing-when-we-pass-unnecessary-parameters-in-scanf-
> tp24719839p24719839.html
> Sent from the linux-c-programming mailing list archive at Nabble.com.
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-c-
> programming" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi
With scenario II your input of 100 is not matching, so you end up with
whatever value was stored at &p before the scanf.
i.e.
(gdb) r
Starting program: ./a.out
Breakpoint 1, main () at test.c:6
6 float i=0;
(gdb) p p
$4 = -37284792
(gdb) s
7 printf ("enter the principal amount\n");
(gdb) s
enter the principal amount
8 scanf ("p:%d",&p);
(gdb) s
100
9 i = (p*5*5)/100;
(gdb) p p
$6 = -37284792
(gdb) s
10 printf ("Interterest is : %f\n",i); }
(gdb) s
Interterest is : -9321198.000000
Here you can see p = -37284792 before and after your scanf
Then i = (-37284792*5*5)/100 = -9321198.000000
If you check the value returned by scanf, you can determine how many input
values were successfully matched. In the case where you entered 100 in
scenario I, scanf would have returned 1, and in scenario II it would have
returned 0.
Regards,
Trevor
next reply other threads:[~2009-07-29 16:02 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-29 16:02 Trevor Woollacott [this message]
2009-07-29 18:00 ` What compiler is doing when we pass unnecessary parameters in scanf Sarkar, Kaushik
-- strict thread matches above, loose matches on Subject: below --
2009-07-29 14:18 RAM_LOCK
2009-07-29 17:01 ` Glynn Clements
2009-10-09 12:45 ` shiva kumar
2009-07-29 14:18 RAM_LOCK
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='009701ca1065$f784d760$706bd90a@mtn.co.za' \
--to=trevorw@pharos-avantgard.com \
--cc=Kaushik.Sarkar@netapp.com \
--cc=linux-c-programming@vger.kernel.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).