# Help. Where is my error?

Discussion in 'C Programming' started by Red Dragon, Oct 17, 2005.

1. ### Red DragonGuest

I am self study C student. I got stuck in the program below on quadratic equation and will be most grateful if someone could help me to unravel the mystery.
Why does the computer refuse to execute my scanf ("%c",&q);
On input 3 4 1 (for a,b and c) I had real roots OK
On input 1 8 16 I had same real roots OK.

However on 4 2 5, (for imaginary roots ) the computer cannot see the scanf ("%c",&q); statement. It just jumps over it.
How can I make the computer not to ignore this statement? I am on Visual C++ platform.
Thanks
Khoon.

/* Roots of a Quadratic Equation.
12.10.05 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (void)

{
int a; int b; int c; float x1; float x2; int E; int E1; float R; float I;float S;
char p; char q; char y;

printf ("Please key in the value of constant a,b and c for finding the roots of quadratic");
printf ("equation ax%c+bx+c=0 :",253);
scanf ("%d%d%d", &a,&b,&c);

E =(b*b)-(4*a*c);

if ( E > 0)
{
x1 = (float)(-b+sqrt(E))/(2*a);
x2 = (float)(-b-sqrt(E))/(2*a);

}

else if (E == 0)
{

x1 = (float)(-b+sqrt(E))/(2*a);

}

else
{

p = 'y';

printf ("Your quadratic equation has two distinct imaginary roots. Do you want to know\n");
printf ("the values of the imaginary roots (Y/N)?");

scanf ("%c",&q);

printf ("\nq = %c\n",q);/* Test statement*/

if (p==q)
printf ("OK I will show your the imaginary roots tomorrow.\n");

else
printf ("Good bye\n");

return 0;

}
}

Red Dragon, Oct 17, 2005

2. ### Geoff TurnerGuest

"Red Dragon" <> wrote in message
>news:...
>I am self study C student. I got stuck in the program below on quadratic

equation and will be >most grateful if someone could help me to unravel the
mystery.
>Why does the computer refuse to execute my scanf ("%c",&q);
>On input 3 4 1 (for a,b and c) I had real roots OK
>On input 1 8 16 I had same real roots OK.

>However on 4 2 5, (for imaginary roots ) the computer cannot see the

scanf ("%c",&q); >statement. It just jumps over it.
>How can I make the computer not to ignore this statement? I am on Visual

C++ platform.
>Thanks
>Khoon.

>/* Roots of a Quadratic Equation.
> 12.10.05 */

>#include <stdio.h>
>#include <stdlib.h>
>#include <math.h>

>int main (void)

>{
>int a; int b; int c; float x1; float x2; int E; int E1; float R; float

I;float S;
>char p; char q; char y;

>printf ("Please key in the value of constant a,b and c for finding the

> printf ("equation ax%c+bx+c=0 :",253);
>scanf ("%d%d%d", &a,&b,&c);

> E =(b*b)-(4*a*c);

> if ( E > 0)
> {
> x1 = (float)(-b+sqrt(E))/(2*a);
> x2 = (float)(-b-sqrt(E))/(2*a);

,x2=%1.6f",x1,x2);
> }

> else if (E == 0)
> {

> x1 = (float)(-b+sqrt(E))/(2*a);

> }

> else
> {

> p = 'y';

you want to know\n");
> printf ("the values of the imaginary roots (Y/N)?");

/********************************************************
fflush (stdin );
/********************************************************
> scanf ("%c",&q);

> printf ("\nq = %c\n",q);/* Test statement*/

/snip>

Geoff Turner, Oct 17, 2005

3. ### Walter RobersonGuest

In article <dj0cbe\$nc\$>,
Geoff Turner <> wrote:

> fflush (stdin );

No! fflush() has no defined behaviour on an input stream!!

--
I am spammed, therefore I am.

Walter Roberson, Oct 17, 2005
4. ### Walter RobersonGuest

In article <>,
Red Dragon <> wrote:
>I am self study C student. I got stuck in the program below on
>quadratic equation and will be most grateful if someone could help me to
>unravel the mystery.
>Why does the computer refuse to execute my scanf ("%c",&q);

We go through this about every second day, and it is surely
in the FAQ.

My explanation of a week ago can be found at

--
Is there any thing whereof it may be said, See, this is new? It hath
been already of old time, which was before us. -- Ecclesiastes

Walter Roberson, Oct 17, 2005
5. ### Michael MairGuest

Red Dragon wrote:
> I am self study C student. I got stuck in the program below on
> quadratic equation and will be most grateful if someone could help me to
> unravel the mystery.
> Why does the computer refuse to execute my * scanf ("%c",&q); *
> On input 3 4 1 (for a,b and c) I had real roots OK
> On input 1 8 16 I had same real roots OK.
>
> However on 4 2 5, (for imaginary roots ) the computer cannot see the
> *scanf ("%c",&q);* statement. It just jumps over it.
> How can I make the computer not to ignore this statement? I am on
> Visual C++ platform.
> Thanks
> Khoon.

<snip!>

You have been repeatedly asked not to post using HTML.
Please stop it. This is usenet, not some mailing list or forum.

Read the FAQ on input using scanf() -- it is not advisable.
At all.

Apart from that: You did not look at the return value of scanf()
so how do you know what happened? You also seem not to have used
the debugger which comes with your IDE.

-Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.

Michael Mair, Oct 17, 2005
6. ### Keith ThompsonGuest

"Red Dragon" <> writes:
> I am self study C student. I got stuck in the program below on quadratic
> equation and will be most grateful if someone could help me to unravel the
> mystery.
> Why does the computer refuse to execute my scanf ("%c",&q);

It doesn't. Your call to scanf("%c", &q) is doing exactly what it's
supposed to do.

To find out what it's supposed to do, read the documentation for
scanf().

You're almost certainly better off using a different method to read
input. A common technique is to use fgets() to read a line at a time,
then use sscanf() to parse the string. (This can have its own
drawbacks; fgets() either leaves the newline character in the input
string, or truncates the line if it's too long.)

--
Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.

Keith Thompson, Oct 17, 2005
7. ### Old WolfGuest

Re: Help. Where is my error?

Red Dragon wrote:
> I am self study C student. I got stuck in the program below on
> quadratic equation and will be most grateful if someone could help
> me to unravel the mystery.
> Why does the computer refuse to execute my scanf ("%c",&q);

You posted this program a couple of weeks ago and got lots
of advice. But you seem to have ignored most of this advice.
Here it is again:

1) x1, x2, R, I, S should be "double", not "float"
2) You MUST check the return value of scanf() and take appropriate
action if it is wrong
3) Don't do any casting (eg. in the line "x1 = (float)FOO")
4) The "return 0" goes AFTER the "else" block, not inside it.

Hint: If you printf the result of your scanf("%c") using
%d, you might understand what is going on.

Old Wolf, Oct 17, 2005
8. ### Red DragonGuest

> We go through this about every second day, and it is surely
> in the FAQ.
>
> My explanation of a week ago can be found at
>
> --
>Quote from Google: Is there any thing whereof it may be said, See, this is new? It hath

scanf() with a %c format element reads *exactly* one character. You
are entering two characters, the input you want and the newline to
terminate the line. Thus after the first scanf(), you still have
a character in the input buffer waiting to be read by the second
scanf().

Dear Walter,
Yes Mr. Walter. This is the exact problem I am having. I dont quite understand the phrase "newline to terminate the line". What is it? It is the "\n" thing? Or a "space"? Can you explain what is the "newline to terminate the line"? How shall I solve the problem? I can use two scanf() line and it will solve the problem. The first scanf() reads the "newline..." and the second scanf() will read my input. Is this the normal way to solve the problem? What is the proper way? Sorry for asking you so many questions.
Thank you.
Khoon.

Red Dragon, Oct 18, 2005
9. ### Red DragonGuest

>
> You have been repeatedly asked not to post using HTML.
> Please stop it. This is usenet, not some mailing list or forum.
>
> Read the FAQ on input using scanf() -- it is not advisable.
> At all.
>
> Apart from that: You did not look at the return value of scanf()
> so how do you know what happened? You also seem not to have used
> the debugger which comes with your IDE.
>
> -Michael
> --
> E-Mail: Mine is an /at/ gmx /dot/ de address.

Mr. Michael,
I wish to apologize for causing you problem. I did not know I was causing a
problem.
1. The dont understand the HTML thing. I did not use HTML. What I did was
to copy from my Visual C++ platform and paste on the Outlook Express
screen. With Mr. Skarmander's instruction, I have set the radio button to
"Plain Text" on the Send Tab and thought the problem is solved. I have
actually sent a copy of the outgoing mail to myself and I dont see any HTML
thing on my screen on the returned copy. So I dont know what else to do.

2. Yes. I tried to look at the return value of scanf() but got nothing
because the computer skipped it . As I just found out, it actually read
the "newline" (I dont know what it is ) so it registered nothing, creating
the problem in question.

3. What is debugger and IDE.? Hope you can bear with me because I am new
to all this and am doing self study. I have nobody else to ask.

Thank you and sorry again.
Khoon.

Red Dragon, Oct 18, 2005
10. ### Red DragonGuest

"Keith Thompson" <> wrote in message news:...
> "Red Dragon" <> writes:
>> I am self study C student. I got stuck in the program below on quadratic
>> equation and will be most grateful if someone could help me to unravel the
>> mystery.
>> Why does the computer refuse to execute my scanf ("%c",&q);

>
> It doesn't. Your call to scanf("%c", &q) is doing exactly what it's
> supposed to do.
>
> To find out what it's supposed to do, read the documentation for
> scanf().

I have read the documentation in the Google as recommended by Walter. I understand now what has happened. On program running, my scanf() read the "newline" instruction in the buffer and jumped to the next statement. So I dont have a chance to make an input. To solve the problem, I can put in 2 scanf()s. But is this the correct way?
Rgds,
Khoon.

> You're almost certainly better off using a different method to read
> input. A common technique is to use fgets() to read a line at a time,
> then use sscanf() to parse the string. (This can have its ow
> drawbacks; fgets() either leaves the newline character in the input
> string, or truncates the line if it's too long.)

Red Dragon, Oct 18, 2005
11. ### Red DragonGuest

Re: Help. Where is my error?

"Old Wolf" <> wrote in message news:...
> Red Dragon wrote:
>> I am self study C student. I got stuck in the program below on
>> quadratic equation and will be most grateful if someone could help
>> me to unravel the mystery.
>> Why does the computer refuse to execute my scanf ("%c",&q);

>
> You posted this program a couple of weeks ago and got lots
> of advice. But you seem to have ignored most of this advice.
> Here it is again:

> 1) x1, x2, R, I, S should be "double", not "float"

Thank you for your help and I very much appreciate it. I am doing the exercise in my book and since precision is not an issue here, I have put it on lower priority. But as you rightly point out. I will adopt it as I will be dealing with big figures.

> 2) You MUST check the return value of scanf() and take appropriate
> action if it is wrong

I was doing this. That is why I call it "test statement".

> 3) Don't do any casting (eg. in the line "x1 = (float)FOO")
> 4) The "return 0" goes AFTER the "else" block, not inside it.

Thanks
Khoon.

Red Dragon, Oct 18, 2005
12. ### peteGuest

Re: Help. Where is my error?

Red Dragon wrote:
>
>
> "Old Wolf" <> wrote in message
> news:...

> > You posted this program a couple of weeks ago and got lots
> > of advice. But you seem to have ignored most of this advice.
> > Here it is again:
> > 1) x1, x2, R, I, S should be "double", not "float"

>
> Thank you for your help and I very much appreciate it. I am doing the
> exercise in my book and since precision is not an issue here, I have
> put it on lower priority. But as you rightly point out. I will
> adopt it as I will be dealing with big figures.

What are you waiting for?
Unless you have an array of them,
small arithmetic types like float, short, and char,
which often get quietly converted to larger types,
are very probably a poor choice.

> > 2) You MUST check the return value of scanf() and take appropriate
> > action if it is wrong

>
> I was doing this. That is why I call it "test statement".

int rc;

rc = scanf("%c", &q);
printf("scanf returned a value of %d\n", rc); /* Test statement*/

--
pete

pete, Oct 18, 2005
13. ### Red DragonGuest

Re: Help. Where is my error?

I have got all the results by using 2 scanf(). One is a dummy. I am also using double instead of float.
Below are the results. I am copying and paste from Notepad, so I hope I dont have HTML problem.
Regards,
Khoon

/* Roots of a Quadratic Equation.
12.10.05 */

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main (void)

{
int a; int b; int c; double x1; double x2; double E; int E1; double R; double I;double S;
char q; char Y;

printf ("Please key in the value of constant a,b and c for finding the roots of quadratic");
printf ("equation ax%c+bx+c=0 :",253);
scanf ("%d%d%d", &a,&b,&c);

E =(b*b)-(4*a*c);

if ( E > 0)
{
x1 = (float)(-b+sqrt(E))/(2*a);
x2 = (float)(-b-sqrt(E))/(2*a);

}

else if (E == 0)
{

x1 = (float)(-b+sqrt(E))/(2*a);

}

else

{

printf ("Your quadratic equation has two distinct imaginary roots. Do you want to know");
printf ("\nthe values of the imaginary roots (Y/N)?");

scanf ("%c",&q); /* Dummy. The computer jumps this scanf() */

scanf ("%c",&q);

printf ("q = %c\n",q); /* Test statement*/

if ('Y'==q)
{
R = (float)-b/(2*a);
S=abs(E);
S=sqrt(S);
I = S/(2*a);
printf ("\nThe imaginary roots are:\n");
printf (" x1=%1.6f + %1.6fi , x2=%1.6f - %1.6fi\n",R,I,R,I);
}
else
printf ("Thank you for using this computer\n");
}
return 0;
}

/* RESULT
Please key in the value of constant a,b and c for finding the roots of quadratic
equation ax²+bx+c=0 :3 4 1

Press any key to continue */

/*Please key in the value of constant a,b and c for finding the roots of quadratic
equation ax²+bx+c=0 :1 8 16

Press any key to continue */

/*Please key in the value of constant a,b and c for finding the roots of quadrati
equation ax²+bx+c=0 :4 2 5
Your quadratic equation has two distinct imaginary roots. Do you want to know
the values of the imaginary roots (Y/N)?Y
q = Y

The imaginary roots are:
x1=-0.250000 + 1.089725i , x2=-0.250000 - 1.089725i
Press any key to continue*/

/*Please key in the value of constant a,b and c for finding the roots of quadratic
equation ax²+bx+c=0 :4 2 5
Your quadratic equation has two distinct imaginary roots. Do you want to know
the values of the imaginary roots (Y/N)?N
q = N
Thank you for using this computer
Press any key to continue*/

Red Dragon, Oct 18, 2005
14. ### Christopher Benson-ManicaGuest

Red Dragon <> wrote:

> 1. The dont understand the HTML thing. I did not use HTML. What I did was
> to copy from my Visual C++ platform and paste on the Outlook Express
> screen. With Mr. Skarmander's instruction, I have set the radio button to
> "Plain Text" on the Send Tab and thought the problem is solved. I have
> actually sent a copy of the outgoing mail to myself and I dont see any HTML
> thing on my screen on the returned copy. So I dont know what else to do.

Well, whatever you've done worked for this post, at least - we'll let
you know if the problem occurs again.

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.

Christopher Benson-Manica, Oct 18, 2005
15. ### Red DragonGuest

Re: Help. Where is my error?

> What are you waiting for?
> Unless you have an array of them,
> small arithmetic types like float, short, and char,
> which often get quietly converted to larger types,
> are very probably a poor choice.
>
>
>> > 2) You MUST check the return value of scanf() and take appropriate
>> > action if it is wrong

>>
>> I was doing this. That is why I call it "test statement".

>
> int rc;
>
> rc = scanf("%c", &q);
> printf("scanf returned a value of %d\n", rc); /* Test statement*/
>
> --
> pete

Hi Pete,
I have already been using double.
As for the test, I find that for all inputs of q, "rc" registers 1.
So what is it suppose to test? What does it suppose to show?
I cannot see how to make use of it because everything I do, "scanf returned
a value of 1".
Thanks
Khoon.

Red Dragon, Oct 18, 2005
16. ### Red DragonGuest

> Well, whatever you've done worked for this post, at least - we'll let
> you know if the problem occurs again.

This post of course works because I dont have any C- program loaded on it.
I have yet to see when I paste a C-program on it, what will be its
outcome.

Now I paste from Notepad and not directly from Visual C++ platform.
Please let me know if the problem occurs again.
Thanks
Khoon.

Red Dragon, Oct 18, 2005
17. ### Tim RentschGuest

"Red Dragon" <> writes:

> >
> > You have been repeatedly asked not to post using HTML.
> > Please stop it. This is usenet, not some mailing list or forum.

[snip]
>
> Mr. Michael,
> I wish to apologize for causing you problem. I did not know I was causing a
> problem.
> 1. The dont understand the HTML thing. I did not use HTML. What I did was
> to copy from my Visual C++ platform and paste on the Outlook Express
> screen. With Mr. Skarmander's instruction, I have set the radio button to
> "Plain Text" on the Send Tab and thought the problem is solved. I have
> actually sent a copy of the outgoing mail to myself and I dont see any HTML
> thing on my screen on the returned copy. So I dont know what else to do.

I suggest trying a mail tool other than Microsoft Outlook Express.
Microsoft mail software is well known for behaving in ways that
can cause problems like this.

Probably what you're using to read news hides the HTML-ness
of what you're posting. FYI, here is what gets transmitted
(each line has '>->-> ' at the beginning). I expect you can
see why other people don't like reading postings like this.

>->-> From: "Red Dragon" <>
>->-> Subject: Re: Help. Where is my error?
>->-> Newsgroups: comp.lang.c
>->-> Date: Tue, 18 Oct 2005 20:43:20 +0800
>->-> Organization: TMnet Malaysia

References: <> <> <4354e645\$>
Lines: 281
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_000E_01C5D424.94159240"
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
NNTP-Posting-Host: 218.111.62.120
X-Original-NNTP-Posting-Host: 218.111.62.120
Message-ID: <>
X-Trace: news.tm.net.my 1129639409 218.111.62.120 (18 Oct 2005 20:43:29 +0800)
Path: nntp-server.caltech.edu!hammer.uoregon.edu!news.glorb.com!news-feed01.roc.ny.frontiernet.net!nntp.frontiernet.net!uunet!spool.news.uu.net!ash.uu.net!news1.tm.net.my!not-for-mail
Xref: nntp-server.caltech.edu comp.lang.c:761878
>->->
>->-> This is a multi-part message in MIME format.
>->->
>->-> ------=_NextPart_000_000E_01C5D424.94159240
>->-> Content-Type: text/plain;
>->-> charset="iso-8859-1"
>->-> Content-Transfer-Encoding: quoted-printable
>->->
>->-> I have got all the results by using 2 scanf(). One is a dummy. I am =
>->-> also using double instead of float.=20
>->-> Below are the results. I am copying and paste from Notepad, so I hope =
>->-> I dont have HTML problem.=20
>->-> Regards,
>->-> Khoon
>->->
>->->
>->-> /* Roots of a Quadratic Equation.
>->-> 12.10.05 */
>->->
>->-> #include <stdio.h>
>->-> #include <stdlib.h>
>->-> #include <math.h>
>->->
>->-> int main (void)
>->->
>->-> {
>->-> int a; int b; int c; double x1; double x2; double E; int E1; double R; =
>->-> double I;double S;
>->-> char q; char Y;
>->->
>->-> printf ("Please key in the value of constant a,b and c for finding the =
>->-> printf ("equation ax%c+bx+c=3D0 :",253);
>->-> scanf ("%d%d%d", &a,&b,&c);
>->-> =20
>->-> E =3D(b*b)-(4*a*c);
>->-> =20
>->-> if ( E > 0)=20
>->-> { =20
>->-> x1 =3D (float)(-b+sqrt(E))/(2*a);
>->-> x2 =3D (float)(-b-sqrt(E))/(2*a);
>->->
>->-> x1=3D%1.6f ,x2=3D%1.6f",x1,x2);
>->-> }
>->-> =20
>->-> else if (E =3D=3D 0)=20
>->-> {
>->->
>->-> x1 =3D (float)(-b+sqrt(E))/(2*a);
>->-> =20
>->-> x1=3Dx2=3D%1.6f\n",x1);
>->-> }
>->-> =20
>->-> else=20
>->->
>->-> {
>->->
>->-> printf ("Your quadratic equation has two distinct imaginary roots. Do =
>->-> you want to know");
>->-> printf ("\nthe values of the imaginary roots (Y/N)?");
>->-> =20
>->-> scanf ("%c",&q); /* Dummy. The computer jumps this =
>->-> scanf() */
>->->
>->-> scanf ("%c",&q);
>->->
>->-> printf ("q =3D %c\n",q); /* Test statement*/
>->->
>->-> if ('Y'=3D=3Dq)
>->-> {
>->-> R =3D (float)-b/(2*a);
>->-> S=3Dabs(E);
>->-> S=3Dsqrt(S);
>->-> I =3D S/(2*a);
>->-> printf ("\nThe imaginary roots are:\n");
>->-> printf (" x1=3D%1.6f + %1.6fi , x2=3D%1.6f - %1.6fi\n",R,I,R,I);
>->-> }
>->-> else
>->-> printf ("Thank you for using this computer\n");
>->-> }
>->-> return 0;
>->-> }
>->->
>->-> /* RESULT
>->-> Please key in the value of constant a,b and c for finding the roots of =
>->-> equation ax=B2+bx+c=3D0 :3 4 1
>->->
>->-> ,x2=3D-1.000000
>->-> Press any key to continue */
>->->
>->-> /*Please key in the value of constant a,b and c for finding the roots of =
>->-> equation ax=B2+bx+c=3D0 :1 8 16
>->->
>->-> Press any key to continue */
>->->
>->-> /*Please key in the value of constant a,b and c for finding the roots of =
>->-> equation ax=B2+bx+c=3D0 :4 2 5
>->-> Your quadratic equation has two distinct imaginary roots. Do you want =
>->-> to know
>->-> the values of the imaginary roots (Y/N)?Y
>->-> q =3D Y
>->->
>->-> The imaginary roots are:
>->-> x1=3D-0.250000 + 1.089725i , x2=3D-0.250000 - 1.089725i
>->-> Press any key to continue*/
>->->
>->-> /*Please key in the value of constant a,b and c for finding the roots of =
>->-> equation ax=B2+bx+c=3D0 :4 2 5
>->-> Your quadratic equation has two distinct imaginary roots. Do you want =
>->-> to know
>->-> the values of the imaginary roots (Y/N)?N
>->-> q =3D N
>->-> Thank you for using this computer
>->-> Press any key to continue*/
>->-> =20
>->->
>->-> ------=_NextPart_000_000E_01C5D424.94159240
>->-> Content-Type: text/html;
>->-> charset="iso-8859-1"
>->-> Content-Transfer-Encoding: quoted-printable
>->->
>->-> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
>->-> <META http-equiv=3DContent-Type content=3D"text/html; =
>->-> charset=3Diso-8859-1">
>->-> <META content=3D"MSHTML 6.00.2900.2769" name=3DGENERATOR>
>->-> <STYLE></STYLE>
>->-> <BODY bgColor=3D#ffffff>
>->-> <DIV><FONT face=3DArial size=3D2>I have got all the results by using 2=20
>->-> scanf().&nbsp; One is a dummy. &nbsp;I am also using double instead of =
>->-> float.=20
>->-> </FONT></DIV>
>->-> <DIV><FONT face=3DArial size=3D2>Below are the results.&nbsp; I am =
>->-> copying&nbsp; and=20
>->-> paste from Notepad, so I hope I dont have HTML problem. </FONT></DIV>
>->-> <DIV><FONT face=3DArial size=3D2>Regards,</FONT></DIV>
>->-> <DIV><FONT face=3DArial size=3D2>Khoon</FONT></DIV>
>->-> <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
>->-> <DIV>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial size=3D2>&nbsp;<FONT =
>->-> color=3D#000080><STRONG>/*&nbsp;&nbsp;=20
>->-> Roots of a Quadratic Equation.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
>->-> 12.10.05&nbsp;=20
>->-> */</STRONG></FONT></FONT></DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 =
>->-> size=3D2><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>#include=20
>->-> &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include=20
>->-> &lt;math.h&gt;</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>int main=20
>->-> (void)</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>{<BR>&nbsp;int =
>->-> a; int b; int=20
>->-> c; double x1; double x2; double E; int E1; double R; double I;double=20
>->-> S;<BR>&nbsp;&nbsp;&nbsp; char q; char Y;</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>&nbsp;printf =
>->-> the value of constant a,b and c for finding the roots of=20
>->-> quadratic");<BR>&nbsp;&nbsp;&nbsp; printf ("equation ax%c+bx+c=3D0&nbsp; =
>->->
>->-> :",253);<BR>&nbsp;scanf ("%d%d%d", =
>->-> &amp;a,&amp;b,&amp;c);<BR>&nbsp;&nbsp;&nbsp;=20
>->-> <BR>&nbsp;&nbsp;&nbsp; E&nbsp; =
>->-> =3D(b*b)-(4*a*c);<BR>&nbsp;<BR>&nbsp;&nbsp; if ( E=20
>->-> &gt; 0) <BR>&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; =
>->-> <BR>&nbsp;&nbsp;&nbsp; x1 =3D=20
>->-> (float)(-b+sqrt(E))/(2*a);<BR>&nbsp;&nbsp;&nbsp; x2 =3D=20
>->-> (float)(-b-sqrt(E))/(2*a);</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 =
>->-> size=3D2><STRONG>&nbsp;&nbsp;printf ("\nYour=20
>->-> quadratic equation has two distinct real roots: x1=3D%1.6f=20
>->-> ,x2=3D%1.6f",x1,x2);<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; <BR>&nbsp;&nbsp; =
>->-> else if (E=20
>->-> =3D=3D 0) <BR>&nbsp;&nbsp; {</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080=20
>->-> size=3D2><STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x1 =3D=20
>->-> (float)(-b+sqrt(E))/(2*a);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
>->-> x1=3Dx2=3D%1.6f\n",x1);<BR>&nbsp;&nbsp; }<BR>&nbsp; <BR>&nbsp;&nbsp; =
>->-> else=20
>->-> </STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>&nbsp;&nbsp;=20
>->-> {</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>&nbsp; printf =
>->-> ("Your=20
>->-> quadratic equation has two distinct imaginary roots.&nbsp; Do you want =
>->-> to=20
>->-> know");<BR>&nbsp; printf ("\nthe values of the imaginary roots=20
>->-> (Y/N)?");<BR>&nbsp;<BR>&nbsp; scanf=20
>->-> ("%c",&amp;q);</STRONG>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
>->-> bsp;&nbsp;&nbsp;&nbsp;=20
>->-> &nbsp;<FONT color=3D#008080><STRONG>/*&nbsp;Dummy. &nbsp;The computer =
>->-> jumps this=20
>->-> scanf() */</STRONG></FONT></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>&nbsp; scanf=20
>->-> ("%c",&amp;q);</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>&nbsp; printf =
>->-> ("q =3D=20
>->-> %c\n",q<FONT color=3D#008080>)<FONT=20
>->-> color=3D#000080>;&nbsp;</FONT>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;/* Test=20
>->-> statement*/</FONT></STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>&nbsp; if =
>->-> ('Y'=3D=3Dq)<BR>&nbsp;=20
>->-> {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R =3D=20
>->-> (float)-b/(2*a);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
>->-> S=3Dabs(E);<BR>&nbsp;&nbsp;=20
>->-> S=3Dsqrt(S);<BR>&nbsp;&nbsp; I =3D =
>->-> S/(2*a);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf=20
>->-> ("\nThe imaginary roots are:\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
>->-> printf ("=20
>->-> x1=3D%1.6f + %1.6fi , x2=3D%1.6f - %1.6fi\n",R,I,R,I);<BR>&nbsp; =
>->-> }<BR>&nbsp;=20
>->-> else<BR>&nbsp;&nbsp; printf ("Thank you for using this=20
>->-> computer\n");<BR>}<BR>&nbsp; return 0;<BR>}</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>/* =
>->-> the value of constant a,b and c for finding the roots of =
>->-> ax=B2+bx+c=3D0&nbsp; :3 4 1</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> equation has=20
>->-> two distinct real roots: x1=3D-0.333333 ,x2=3D-1.000000<BR>Press any key =
>->-> to continue=20
>->-> */</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>/*Please key in =
>->-> the value of=20
>->-> constant a,b and c for finding the roots of quadratic<BR>equation=20
>->-> ax=B2+bx+c=3D0&nbsp; :1 8 16</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> equation has=20
>->-> two same: x1=3Dx2=3D-4.000000<BR>Press any key to continue =
>->-> */</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>/*Please key in =
>->-> the value of=20
>->-> constant a,b and c for finding the roots of quadrati<BR>equation=20
>->-> imaginary=20
>->-> roots.&nbsp; Do you want to know<BR>the values of the imaginary roots=20
>->-> (Y/N)?Y<BR>q =3D Y</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>The imaginary =
>->-> roots=20
>->-> are:<BR>x1=3D-0.250000 + 1.089725i , x2=3D-0.250000 - 1.089725i<BR>Press =
>->-> any key to=20
>->-> continue*/</STRONG></FONT></DIV>
>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>/*Please key in =
>->-> the value of=20
>->-> constant a,b and c for finding the roots of quadratic<BR>equation=20
>->-> imaginary=20
>->-> roots.&nbsp; Do you want to know<BR>the values of the imaginary roots=20
>->-> (Y/N)?N<BR>q =3D N<BR>Thank you for using this computer<BR>Press any key =
>->-> to=20
>->-> continue*/<BR>&nbsp;&nbsp; <BR></STRONG></FONT></DIV></BODY></HTML>
>->->
>->-> ------=_NextPart_000_000E_01C5D424.94159240--
>->->

Tim Rentsch, Oct 18, 2005
18. ### Mark McIntyreGuest

On Tue, 18 Oct 2005 17:57:50 +0800, in comp.lang.c , "Red Dragon"
<> wrote:

>I dont quite understand the phrase "newline to terminate the line".

How many keys do you press, when you supply user input value of 1? One
key or two?
--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>

----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
----= East and West-Coast Server Farms - Total Privacy via Encryption =----

Mark McIntyre, Oct 18, 2005
19. ### Red DragonGuest

>>->-> any key to=20
>>->-> continue*/</STRONG></FONT></DIV>
>>->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
>>key in =
>>->-> the value of=20
>>->-> constant a,b and c for finding the roots of quadratic<BR>equation=20
>>distinct =
>>->-> imaginary=20
>>->-> roots.&nbsp; Do you want to know<BR>the values of the imaginary
>>roots=20
>>->-> (Y/N)?N<BR>q =3D N<BR>Thank you for using this computer<BR>Press any
>>key =
>>->-> to=20
>>->-> continue*/<BR>&nbsp;&nbsp; <BR></STRONG></FONT></DIV></BODY></HTML>
>>->->
>>->-> ------=_NextPart_000_000E_01C5D424.94159240--
>>->->

Thank you Tim,
I absolutely have no idea of the problem until I saw your post to me. Not
even I dont like to read it, I am unable to read it.
I had purposely sent myself a returned copy of the mail and it was not like
this. The returned copy had not a single line of HTML code.
I suppose why this problem arises is because only readers with Outlook
Express get the mail in its perfect state. Others with different platform
will get it all in HTML.
Thanks for enlightening me.
Regards,
Khoon.

Red Dragon, Oct 19, 2005
20. ### Red DragonGuest

"Mark McIntyre" <> wrote in message
news:...
> On Tue, 18 Oct 2005 17:57:50 +0800, in comp.lang.c , "Red Dragon"
> <> wrote:
>
>>I dont quite understand the phrase "newline to terminate the line".

>
> How many keys do you press, when you supply user input value of 1? One
> key or two?
> --
> Mark McIntyre

2 keys. One for 1 and One for Enter.
Can you kindly tell me is using 2 scanf() the best solution to the problem?
What is a better method?
Thanks
Rgds,
Khoon.

Red Dragon, Oct 19, 2005