By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,617 Members | 1,600 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,617 IT Pros & Developers. It's quick & easy.

Help. Where is my error?

P: n/a
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);

printf ("\nYour quadratic equation has two distinct real roots: x1=%1.6f ,x2=%1.6f",x1,x2);
}

else if (E == 0)
{

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

printf ("\nYour quadratic equation has two same: x1=x2=%1.6f\n",x1);
}

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;

}
}

Nov 15 '05 #1
Share this Question
Share on Google+
38 Replies


P: n/a

"Red Dragon" <ts*****@streamyx.com> wrote in message
news:43********@news.tm.net.my...
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); printf ("\nYour quadratic equation has two distinct real roots: x1=%1.6f ,x2=%1.6f",x1,x2); } else if (E == 0)
{ x1 = (float)(-b+sqrt(E))/(2*a); printf ("\nYour quadratic equation has two same: x1=x2=%1.6f\n",x1);
} 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)?");
/************************************************** ******
fflush (stdin );
/************************************************** ****** scanf ("%c",&q); printf ("\nq = %c\n",q);/* Test statement*/

/snip>
Nov 15 '05 #2

P: n/a
In article <dj*********@blackmamba.itd.rl.ac.uk>,
Geoff Turner <g.********@rl.ac.uk> wrote:
fflush (stdin );


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

--
I am spammed, therefore I am.
Nov 15 '05 #3

P: n/a
In article <43********@news.tm.net.my>,
Red Dragon <ts*****@streamyx.com> 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
http://groups.google.ca/group/comp.l...65f0744a89f300

--
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
Nov 15 '05 #4

P: n/a
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.
Nov 15 '05 #5

P: n/a
"Red Dragon" <ts*****@streamyx.com> 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) ks***@mib.org <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.
Nov 15 '05 #6

P: n/a
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.

Nov 15 '05 #7

P: n/a
> 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
http://groups.google.ca/group/comp.l...65f0744a89f300

--
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.



Nov 15 '05 #8

P: n/a
>
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.

Nov 15 '05 #9

P: n/a

"Keith Thompson" <ks***@mib.org> wrote in message news:ln************@nuthaus.mib.org...
"Red Dragon" <ts*****@streamyx.com> 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.)

Nov 15 '05 #10

P: n/a

"Old Wolf" <ol*****@inspire.net.nz> wrote in message news:11*********************@g43g2000cwa.googlegro ups.com...
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.

Nov 15 '05 #11

P: n/a
Red Dragon wrote:


"Old Wolf" <ol*****@inspire.net.nz> wrote in message
news:11*********************@g43g2000cwa.googlegro ups.com...

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
Nov 15 '05 #12

P: n/a
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);

printf ("\nYour quadratic equation has two distinct real roots: x1=%1.6f ,x2=%1.6f",x1,x2);
}

else if (E == 0)
{

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

printf ("\nYour quadratic equation has two same: x1=x2=%1.6f\n",x1);
}

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

Your quadratic equation has two distinct real roots: x1=-0.333333 ,x2=-1.000000
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

Your quadratic equation has two same: x1=x2=-4.000000
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*/


Nov 15 '05 #13

P: n/a
Red Dragon <ts*****@streamyx.com> 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.
Nov 15 '05 #14

P: n/a
> 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.

Nov 15 '05 #15

P: n/a
> 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.

Nov 15 '05 #16

P: n/a
"Red Dragon" <ts*****@streamyx.com> 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" <ts*****@streamyx.com>
->-> Subject: Re: Help. Where is my error?
->-> Newsgroups: comp.lang.c
->-> Date: Tue, 18 Oct 2005 20:43:20 +0800
->-> Organization: TMnet Malaysia References: <43********@news.tm.net.my> <11*********************@g43g2000cwa.googlegroups. com> <43**********@news.tm.net.my>
Lines: 281
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_000E_01C5D424.94159240"
X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
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: <43********@news.tm.net.my>
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.c om!news-feed01.roc.ny.frontiernet.net!nntp.frontiernet.net !uunet!spool.news.uu.net!ash.uu.net!news1.tm.net.m y!not-for-mail->->
->-> 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 =
->-> roots of quadratic");
->-> 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);
->->
->-> printf ("\nYour quadratic equation has two distinct real roots: =
->-> 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
->-> printf ("\nYour quadratic equation has two same: =
->-> 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 =
->-> quadratic
->-> equation ax=B2+bx+c=3D0 :3 4 1
->->
->-> Your quadratic equation has two distinct real roots: x1=3D-0.333333 =
->-> ,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 =
->-> quadratic
->-> equation ax=B2+bx+c=3D0 :1 8 16
->->
->-> Your quadratic equation has two same: x1=3Dx2=3D-4.000000
->-> Press any key to continue */
->->
->-> /*Please key in the value of constant a,b and c for finding the roots of =
->-> quadrati
->-> 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 =
->-> quadratic
->-> 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">
->-> <HTML><HEAD>
->-> <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>
->-> </HEAD>
->-> <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 =
->-> ("Please key in=20
->-> 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
->-> <BR>&nbsp;&nbsp; printf ("\nYour quadratic equation has two same:=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>/* =
->-> RESULT<BR>Please key in=20
->-> the value of constant a,b and c for finding the roots of =
->-> quadratic<BR>equation=20
->-> ax=B2+bx+c=3D0&nbsp; :3 4 1</STRONG></FONT></DIV>
->-> <DIV><FONT color=3D#000080><STRONG></STRONG></FONT>&nbsp;</DIV>
->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>Your quadratic =
->-> 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>
->-> <DIV><FONT face=3DArial color=3D#000080 size=3D2><STRONG>Your quadratic =
->-> 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
->-> ax=B2+bx+c=3D0&nbsp; :4 2 5<BR>Your quadratic equation has two distinct =
->-> 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
->-> ax=B2+bx+c=3D0&nbsp; :4 2 5<BR>Your quadratic equation has two 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--
->->

Nov 15 '05 #17

P: n/a
>>->-> 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
->-> ax=B2+bx+c=3D0&nbsp; :4 2 5<BR>Your quadratic equation has two
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.

Nov 15 '05 #18

P: n/a
On Tue, 18 Oct 2005 17:57:50 +0800, in comp.lang.c , "Red Dragon"
<ts*****@streamyx.com> 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>
CLC readme: <http://www.ungerhu.com/jxh/clc.welcome.txt>

----== 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 =----
Nov 15 '05 #19

P: n/a

"Mark McIntyre" <ma**********@spamcop.net> wrote in message
news:5t********************************@4ax.com...
On Tue, 18 Oct 2005 17:57:50 +0800, in comp.lang.c , "Red Dragon"
<ts*****@streamyx.com> 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.


Nov 15 '05 #20

P: n/a
Red Dragon wrote:
"Mark McIntyre" <ma**********@spamcop.net> wrote in message
news:5t********************************@4ax.com...
On Tue, 18 Oct 2005 17:57:50 +0800, in comp.lang.c , "Red Dragon"
<ts*****@streamyx.com> 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?


No, What would happen if the user entered more than one character on the
line before entering Enter?
What is a better method?


Have a look at the getchar() function. Use that to write a bit of code
that will keep getting characters until it receives a new line.

Kevin Bagust.
Nov 15 '05 #21

P: n/a
On Wed, 19 Oct 2005 19:02:32 +0800, in comp.lang.c , "Red Dragon"
<ts*****@streamyx.com> wrote:

"Mark McIntyre" <ma**********@spamcop.net> wrote in message
news:5t********************************@4ax.com.. .
On Tue, 18 Oct 2005 17:57:50 +0800, in comp.lang.c , "Red Dragon"
<ts*****@streamyx.com> 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.


.... so you see now where the newline comes from.
Can you kindly tell me is using 2 scanf() the best solution to the problem?
What is a better method?


Personally I prefer to fgets() into a char array of known size, then
parse the array via eg sscanf. I can then decide if there's still
input waiting to be read, and if so I can empty it via repeated calls
to say getchar.

This is probably a FAQ (12.18, 12.20, 12.26 all seem relevant to this
discussion, plus a few others in that area).
--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.ungerhu.com/jxh/clc.welcome.txt>

----== 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 =----
Nov 15 '05 #22

P: n/a
I tried getchar() and found it has same effect as scanf()
Anyway thanks at lot.
Rgds,
Khoon.

Nov 15 '05 #23

P: n/a
"Red Dragon" <ts*****@streamyx.com> writes:
I tried getchar() and found it has same effect as scanf()
Anyway thanks at lot.
Rgds,
Khoon.


Surely you've been here long enough to know how to post a proper
followup using Google Groups. I've even seen you do it in this
thread.

Incidentally, saying that getchar() has the same effect as scanf() is
meaningless without context. They're obviously two different
functions, doing different things. If you'll show us some code, we
can suggest improvements.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <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.
Nov 15 '05 #24

P: n/a

"Keith Thompson" <ks***@mib.org> wrote in message news:ln************@nuthaus.mib.org...
"Red Dragon" <ts*****@streamyx.com> writes:
I tried getchar() and found it has same effect as scanf()
Anyway thanks a lot.
Rgds,
Khoon.
Surely you've been here long enough to know how to post a proper
followup using Google Groups. I've even seen you do it in this
thread.


Sorry. What is Google Groups? I am using Outlook Express and Visual C++ platform.
Incidentally, saying that getchar() has the same effect as scanf() is
meaningless without context. They're obviously two different
functions, doing different things. If you'll show us some code, we
can suggest improvements.


Thank you. Here is a program to illustrate my point.

/*Program to Demonstrate getchar() and scanf()*/
#include <stdio.h>

int main (void)
{
char a,b;

/*Section 1*/
printf("Enter a character > ");
scanf("%c",&a);
printf("a=%c\n",a);
printf("Enter another character > ");
getchar("%c",&b);
printf("b=%c\n",b);

/*section 2*/
printf("\nEnter a character > ");
scanf("%c",&a);
printf("a=%c\n",a);
printf("Enter another character > ");
scanf("%c",&b);
printf("b=%c\n",b);

/*section 3*/
printf("\nEnter a character > ");
scanf("%c",&a);
printf("a=%c\n",a);
printf("Enter another character > ");
scanf("%c",&b); /* Dummy */
scanf("%c",&b);
printf("b=%c\n",b);

return 0;
}
/*PRINT RESULT
Enter a character > a
a=a
Enter another character > b=¦

Enter a character > a
a=a
Enter another character > b=

Enter a character > a
a=a
Enter another character > b
b=b
Press any key to continue
*/

You can see that I have divided the program into 3 sections.
1st section with getchar()
2nd section with single scanf()
3rd section with double scanf()
In the Printout Result, only 3rd Section with a Dummy performed perfectly.
BTW, Do you have HTML problem with my program above?
Regards and thank you very much.
Khoon.
Nov 15 '05 #25

P: n/a
"Red Dragon" <ts*****@streamyx.com> writes:
"Keith Thompson" <ks***@mib.org> wrote in message
news:ln************@nuthaus.mib.org...
"Red Dragon" <ts*****@streamyx.com> writes:
I tried getchar() and found it has same effect as scanf()
Anyway thanks a lot.
Surely you've been here long enough to know how to post a proper
followup using Google Groups. I've even seen you do it in this
thread.

Sorry. What is Google Groups? I am using Outlook Express and Visual C++
platform.


Sorry, my mistake.

groups.google.com has a broken interface that encourages users to post
followups with no attributions or quoted text. I don't know why I
didn't check your article's headers before assuming you were using
Google Groups.

In general, posting a followup that doesn't quote any of the parent
article is considered rude.
Incidentally, saying that getchar() has the same effect as scanf() is
meaningless without context. They're obviously two different
functions, doing different things. If you'll show us some code, we
can suggest improvements.

Thank you. Here is a program to illustrate my point.

/*Program to Demonstrate getchar() and scanf()*/
#include <stdio.h>

int main (void)
{
char a,b;

/*Section 1*/
printf("Enter a character > ");
scanf("%c",&a);
printf("a=%c\n",a);
printf("Enter another character > ");
getchar("%c",&b);
printf("b=%c\n",b);


Ok, I was starting to write an explanation of what this code does when
I noticed this call:

getchar("%c",&b);

getchar() takes no arguments and returns an int value representing
the value of the input character or EOF. You have the required
"#include <stdio.h>" at the top of the program, so the compiler
knows this. Any working C compiler should give you an error message
on that line, or at least a warning.

Either you're running the compiler in a mode that causes it not to
display the error message (don't do that), or you're getting a warning
and ignoring it (don't do that), or the code you posted isn't the same
as the code you compiled (once again, don't do that).

If you're going to post code, you need to copy-and-paste the *exact*
code that you fed to the compiler. If you try to re-type it, you'll
make mistakes (I know I would), and there's no way we can guess which
errors are in the original code and which you introduced by re-typing
it.

If that really was the code you compiled, including the getchar() call
with too many arguments, you need to compile without turning off
diagnostic messages, and you need to fix any errors flagged by the
compiler.

[...]
BTW, Do you have HTML problem with my program above?


Not that I can see, but I think my newsreader sometimes quietly
renders HTML as plain text.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <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.
Nov 15 '05 #26

P: n/a
In general, posting a followup that doesn't quote any of the parent
article is considered rude.
Yes. I agree with that.
Incidentally, saying that getchar() has the same effect as scanf() is
meaningless without context.

I was responding to the suggestion by Kevin Bagust to try using getchar() to solve the problem of scanf() being unable to read input character. As I learnt from Mark McIntyre, it could not read my character input because it was reading "newline' and jumped. This problem was demonstrated in my exhibit program as Section 1 using getchar() and section 2 using single scanf(), both failed to execute. Only when I used double scanf() was the problem solved.
Ok, I was starting to write an explanation of what this code does when
I noticed this call:

getchar("%c",&b);

getchar() takes no arguments and returns an int value representing
the value of the input character or EOF. You have the required
"#include <stdio.h>" at the top of the program, so the compiler
knows this. Any working C compiler should give you an error message
on that line, or at least a warning.
I started C programing a month ago, self study on a book " A Structured Programming Approach Using C by Forouzan and Gilberg. I think it is very good.
Now I am on into Looping in Chapter 6, and I see getchar() is a topic in Chapter 7.
Either you're running the compiler in a mode that causes it not to
display the error message (don't do that), or you're getting a warning
and ignoring it (don't do that), or the code you posted isn't the same
as the code you compiled (once again, don't do that).
When I compiled my code as shown in my previous program, I got 0 errors and 0 warnings.
If you're going to post code, you need to copy-and-paste the *exact*
code that you fed to the compiler. If you try to re-type it, you'll
make mistakes (I know I would), and there's no way we can guess which
errors are in the original code and which you introduced by re-typing
it.

When Tim Rentsch posted back to me what he had received, I was horrified by the load of gibberish HTML codes I had inadvertently created.
What I had earlier done was to copy from my Visual C++ platform and paste into Outlook Express. What I now do is to cut and paste into Notepad, and then cut from Notepad and paste into Outlook. In this way, I reckon I have killed all the HTML code. I did not do any retyping.
BTW, Do you have HTML problem with my program above?


Not that I can see, but I think my newsreader sometimes quietly
renders HTML as plain text.


Thank you very much.
Regards,
Khoon.
Nov 15 '05 #27

P: n/a
In article <ln************@nuthaus.mib.org> Keith Thompson <ks***@mib.org> writes:
"Red Dragon" <ts*****@streamyx.com> writes:

....
/*Program to Demonstrate getchar() and scanf()*/
#include <stdio.h>

int main (void)
{
char a,b;


This is the first error. a and b should be ints.
--
dik t. winter, cwi, kruislaan 413, 1098 sj amsterdam, nederland, +31205924131
home: bovenover 215, 1025 jn amsterdam, nederland; http://www.cwi.nl/~dik/
Nov 15 '05 #28

P: n/a
On Fri, 21 Oct 2005 17:19:09 +0800, Red Dragon wrote:
[in reply to Keith Thompson]
Incidentally, saying that getchar() has the same effect as scanf() is
meaningless without context.

I was responding to the suggestion by Kevin Bagust to try using getchar()
to solve the problem of scanf() being unable to read input character.
As I learnt from Mark McIntyre, it could not read my character input
because it was reading "newline' and jumped.


Actually the point is that it was _not_ reading newline.
This problem was
demonstrated in my exhibit program as Section 1 using getchar() and
section 2 using single scanf(), both failed to execute. Only when I
used double scanf() was the problem solved.
The dummy scanf is reading the newline (generated when you press
enter/return) that was not read by the first scanf.

[...] I see getchar() is a topic in Chapter 7.
getchar() doesn't take arguments as scanf does, it returns a value.

Your code getchar("%c",&b); should be rewritten b = getchar();

[...] When I compiled my code as shown in my previous program, I got 0 errors
and 0 warnings.
Find out how to invoke your Visual C++ compiler in ANSI or ISO C mode
(these may be abbreviated as C89/C90/C99). In such a mode it is required
to issue a diagnostic for your code.

[...] When Tim Rentsch posted back to me what he had received, I was
horrified by the load of gibberish HTML codes I had inadvertently
created. What I had earlier done was to copy from my Visual C++ platform
and paste into Outlook Express. What I now do is to cut and paste into
Notepad, and then cut from Notepad and paste into Outlook. In this
way, I reckon I have killed all the HTML code.


Some of your posts - even those without source code - still contain HTML,
including the one to which I'm replying and its predecessor. It is
likely that Outlook is generating it - check that Plain text is still
selected for News sending on the Send tab.

--
http://members.dodo.com.au/~netocrat
Nov 15 '05 #29

P: n/a
Keith Thompson wrote:
"Red Dragon" <ts*****@streamyx.com> writes:

Sorry. What is Google Groups? I am using Outlook Express and
Visual C++ platform.


Sorry, my mistake.

If you can get your newsreader to display custom message headers
(XanaNews does) then adding the User-Agent will help differentiate
Google from other posts.

Example:
User-Agent: G2/0.2


Brian
Nov 15 '05 #30

P: n/a
Red Dragon wrote:

BTW, Do you have HTML problem with my program above?
Regards and thank you very much. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">


Keith may not see it, but I do. Weren't you given instructions on how
to set OE so it doesn't do that?

Brian
Nov 15 '05 #31

P: n/a
"Red Dragon" <ts*****@streamyx.com> writes:
[...]
I was responding to the suggestion by Kevin Bagust to try using getchar()
to solve the problem of scanf() being unable to read input character.
As I learnt from Mark McIntyre, it could not read my character input
because it was reading "newline' and jumped. This problem was
demonstrated in my exhibit program as Section 1 using getchar() and
section 2 using single scanf(), both failed to execute. Only when I
used double scanf() was the problem solved.


I think this is a major misconception that you need to correct. The
getchar() and scanf() calls are *not* failing to execute. The calls
are being executed, and they're almost certainly doing exactly what
they're supposed to do. They're just not doing what you expect them
to do.

Ok, I was starting to write an explanation of what this code does when
I noticed this call:

getchar("%c",&b);

getchar() takes no arguments and returns an int value representing
the value of the input character or EOF. You have the required
"#include <stdio.h>" at the top of the program, so the compiler
knows this. Any working C compiler should give you an error message
on that line, or at least a warning.


I started C programing a month ago, self study on a book " A Structured
Programming Approach Using C by Forouzan and Gilberg. I think it is
very good.
Now I am on into Looping in Chapter 6, and I see getchar() is a topic in
Chapter 7.
Either you're running the compiler in a mode that causes it not to
display the error message (don't do that), or you're getting a warning
and ignoring it (don't do that), or the code you posted isn't the same
as the code you compiled (once again, don't do that).

When I compiled my code as shown in my previous program, I got 0 errors
and 0 warnings.


Ok, that's bizarre. What compiler are you using, and with what
command-line arguments?

Try compiling the following:

#include <stdio.h>
int main (void)
{
char b;
getchar("%c",&b);
return 0;
}

Remember, getchar() takes no arguments and returns an int. A typical
compiler probably won't complain about ignoring the returned result,
but *any* compiler should complain about the incorrect arguments.

Does your compiler have an option that enable additional warnings?
If so, use it. Once you get your compiler to complain about the
getchar() call, fix that and any other errors it flags, and re-post it.

BTW, you seem to be snipping attributions on quoted text, the lines
that say something like

"John Doe" <so******@somewhere.com> writes:

You need to leave those in so readers can tell who wrote what.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <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.
Nov 15 '05 #32

P: n/a
"Default User" <de***********@yahoo.com> writes:
Keith Thompson wrote:
"Red Dragon" <ts*****@streamyx.com> writes:
> Sorry. What is Google Groups? I am using Outlook Express and
> Visual C++ platform.


Sorry, my mistake.


If you can get your newsreader to display custom message headers
(XanaNews does) then adding the User-Agent will help differentiate
Google from other posts.

Example:
User-Agent: G2/0.2


The header was right in front of me. I use
Organization: http://groups.google.com
to tell me that something was posted through Google. The article in
question had
Organization: TMnet Malaysia
My brain just decided to take a little nap at that moment.

--
Keith Thompson (The_Other_Keith) ks***@mib.org <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.
Nov 15 '05 #33

P: n/a
Keith Thompson wrote:

Ok, that's bizarre. What compiler are you using, and with what
command-line arguments?

Try compiling the following:

#include <stdio.h>
int main (void)
{
char b;
getchar("%c",&b);
return 0;
}

Remember, getchar() takes no arguments and returns an int. A typical
compiler probably won't complain about ignoring the returned result,
but *any* compiler should complain about the incorrect arguments.

Does your compiler have an option that enable additional warnings?
If so, use it. Once you get your compiler to complain about the
getchar() call, fix that and any other errors it flags, and re-post it.


Just curious, if it were a really old library (or old headers)
-- pre-ansi -- would stdio.h have

int getchar();

instead of

int getchar(void);

Would that then not compile and work just fine, and furthermore
quite likely give no warnings of any sort? As in the following
example:

temp(1625)$ cat foo.c
#include <stdio.h>
int foo()
{
puts("got foo!");
return 0;
}
int main (void)
{
foo("a", 1, 2);
return 0;
}
temp(1626)$ gcc -ansi -pedantic -Wall -o foo foo.c
temp(1627)$

You get no warnings. Just wondering if OP somehow
has headers without the void...

-David

Nov 15 '05 #34

P: n/a
Keith Thompson wrote:
"Default User" <de***********@yahoo.com> writes:
If you can get your newsreader to display custom message headers
(XanaNews does) then adding the User-Agent will help differentiate
Google from other posts.

Example:
User-Agent: G2/0.2


The header was right in front of me. I use
Organization: http://groups.google.com
to tell me that something was posted through Google. The article in
question had
Organization: TMnet Malaysia

That'll work too.
My brain just decided to take a little nap at that moment.


It IS a Friday (at least where I am). You can't much blame the brain.
Brian

Nov 15 '05 #35

P: n/a

David Resnick wrote:
Keith Thompson wrote:

Ok, that's bizarre. What compiler are you using, and with what
command-line arguments?

Try compiling the following:

#include <stdio.h>
int main (void)
{
char b;
getchar("%c",&b);
return 0;
}

Remember, getchar() takes no arguments and returns an int. A typical
compiler probably won't complain about ignoring the returned result,
but *any* compiler should complain about the incorrect arguments.

Does your compiler have an option that enable additional warnings?
If so, use it. Once you get your compiler to complain about the
getchar() call, fix that and any other errors it flags, and re-post it.


Just curious, if it were a really old library (or old headers)
-- pre-ansi -- would stdio.h have

int getchar();

instead of

int getchar(void);

Would that then not compile and work just fine, and furthermore
quite likely give no warnings of any sort? As in the following
example:

temp(1625)$ cat foo.c
#include <stdio.h>
int foo()
{
puts("got foo!");
return 0;
}
int main (void)
{
foo("a", 1, 2);
return 0;
}
temp(1626)$ gcc -ansi -pedantic -Wall -o foo foo.c
temp(1627)$

You get no warnings. Just wondering if OP somehow
has headers without the void...

-David


In answer to my own question, you can get this
behavior with getchar on solaris/gcc with
-traditional argument:

temp(593)$ cat foo.c
#include <stdio.h>
#undef getchar
int main (void)
{
int a = getchar("a", 1, 2);
printf("a = %c\n", a);
return 0;
}
temp(594)$ gcc -o foo -traditional -Wall foo.c
temp(595)$

Need to undef getchar, because macro version of it DOES care
about number of arguments...

-David

Nov 15 '05 #36

P: n/a
On Wed, 19 Oct 2005 07:02:44 +0800, "Red Dragon"
<ts*****@streamyx.com> wrote:

<snip sample of HTML from OE's multipart/alternative>
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.
You probably mean you didn't _see_ any HTML code. It was almost
certainly there. OE when it finds (correctly labelled) HTML in email
or netnews will silently _render_ (that is, execute) it. There used to
be a menu operation "View Source" which shows the actual "raw"
message, although the last time I tried to use it on a relatively
recent version (about 2002 or 2003) it had either been removed or
hidden too well for me to find it. This is (was?) similar to the (more
sensible) operation of the web browser Internet Explorer which by
default when it fetches an HTML page executes it and displays the
formatted result, but you can use View Source to see the actual code.
Alternatively I think you can File / Save As to a file in .txt format
and then open in notepad or any "not overly clever" editor.
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.
There are some other newsreaders that do render HTML, at least
optionally. But not all, which is why in many newsgroups including
here it is preferred to use plain text. As you seem to be doing
correctly at least some times.
Thanks for enlightening me.
Regards,
Khoon.


- David.Thompson1 at worldnet.att.net
Nov 15 '05 #37

P: n/a
>
There are some other newsreaders that do render HTML, at least
optionally. But not all, which is why in many newsgroups including
here it is preferred to use plain text. As you seem to be doing
correctly at least some times.

- David.Thompson1 at worldnet.att.net


Thanks for the information.
Regards,
Khoon.
Nov 15 '05 #38

P: n/a
On 21 Oct 2005 11:10:18 -0700, "David Resnick" <ln********@gmail.com>
wrote:
Keith Thompson wrote: <snips>
getchar("%c",&b); Remember, getchar() takes no arguments and returns an int. A typical
compiler probably won't complain about ignoring the returned result,
but *any* compiler should complain about the incorrect arguments.

Just curious, if it were a really old library (or old headers)
-- pre-ansi -- would stdio.h have

int getchar();

instead of

int getchar(void);

Would that then not compile and work just fine, and furthermore
quite likely give no warnings of any sort? As in the following
example: <snip>

It is quite likely and certainly permitted to go undiagnosed.

It's less likely and certainly not guaranteed to work; that depends on
the implementation and in particular the calling convention(s), which
in turn usually depends on the platform. For some systems including
x86 Windows with its de-facto standard cdecl, it does work; on other
systems including some I've used it crashes or destroys data.

- David.Thompson1 at worldnet.att.net
Nov 15 '05 #39

This discussion thread is closed

Replies have been disabled for this discussion.