Mail Archives: djgpp/2003/08/27/07:31:33
From: | Martin Ambuhl <mambuhl AT earthlink DOT net>
|
User-Agent: | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)
|
X-Accept-Language: | en-us, en, de, fr, ru, el, zh
|
MIME-Version: | 1.0
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | Re: Simple program. Strange results.
|
References: | <HfZ2b.3213$cQ1 DOT 755278 AT kent DOT svc DOT tds DOT net>
|
In-Reply-To: | <HfZ2b.3213$cQ1.755278@kent.svc.tds.net>
|
Lines: | 90
|
Message-ID: | <hO%2b.16285$8i2.341@newsread2.news.atl.earthlink.net>
|
Date: | Wed, 27 Aug 2003 10:33:49 GMT
|
NNTP-Posting-Host: | 66.90.170.236
|
X-Complaints-To: | abuse AT earthlink DOT net
|
X-Trace: | newsread2.news.atl.earthlink.net 1061980429 66.90.170.236 (Wed, 27 Aug 2003 06:33:49 EDT)
|
NNTP-Posting-Date: | Wed, 27 Aug 2003 06:33:49 EDT
|
Organization: | EarthLink Inc. -- http://www.EarthLink.net
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
Kenton W. Mellott wrote:
> When compiling the following program with gcc (no switches) almost all the
> input variable end up displaying strange results.
>
>
> #include <stdio.h>
>
> int scanf(const char *format, ...);
Don't do this. Trust <stdio.h> to have the correct prototype.
>
> int main()
> {
> puts("Please enter a string.");
> char buf[100];
> scanf("%s", buf);
> printf("you just entered: ''%s''. \n", buf );
>
>
> puts("Please enter a floating point number.");
> float x,y;
> scanf("%f", !x);
^^^
The '!' is wrong. You mean `scanf("%f", &x);'
> printf("you just entered: '%g'. \n", !x );
^^^
The '!' is wrong. You mean `printf("you just entered: '%g'.\n", x);
>
>
> puts("Please enter 2 floating point numbers and a string.");
> scanf("%f %f %s", !x, !y, buf);
> printf("you just entered: '%g','%g', '%s'.\n",
> !x, !y, buf);
As before, all the '!'s are wrong.
>
>
> }
Please use spaces instead of tabs when preparing code for posting. You can
see above what a mess you got.
Here's a version that is better formatted, will compile under either C89 or
C99 (as well as gnu89 and gnu99), and takes "enter a string" more seriously:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
char buf[100], *nl;
float x, y;
int nchar;
puts("Please enter a string.");
fgets(buf, sizeof buf, stdin);
if ((nl = strchr(buf, '\n')))
*nl = 0;
printf("you just entered: \"%s\".\n", buf);
puts("Please enter a floating point number.");
fgets(buf, sizeof buf, stdin);
sscanf(buf, "%f", &x);
printf("you just entered: '%g'.\n", x);
puts("Please enter 2 floating point numbers and a string.");
fgets(buf, sizeof buf, stdin);
if ((nl = strchr(buf, '\n')))
*nl = 0;
sscanf(buf, "%f %f %n", &x, &y, &nchar);
printf("you just entered: '%g','%g', \"%s\".\n", x, y, buf + nchar);
return 0;
}
--
Martin Ambuhl
- Raw text -