Fwd: What compiler is doing when we pass unnecessary parameters in scanf

Aneesh Bhasin <[email protected]>
Newsgroups org.kernel.vger.linux-c-programming
Message-ID <[email protected]>
----forgot to add list as cc------

Hi Kaushik,

any extra non-whitespace, non "%" characters are matched against the
input given from stdin - if they match, it is ignored and if it
doesn't match, no further input is taken.

In case of your second scenario, when you specify "p:%d" as string,
the program expects the input to be of the format "p:<some number>"
but since you give 100 as the input, no value is assigned to the
variable p (you can check the return value of scanf - its zero) and
hence, whatever junk value is in variable p, it is used for further
calculation.

With the second scenario, try giving the input as "p:100" and then p
should get value 100 as expected...

Hope that helps.
Aneesh

On Wed, Jul 29, 2009 at 7:48 PM, RAM_LOCK <[email protected]> wrote:
>
> 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 [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.