🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sys.atari.st
Article #34111

Re: problem with mwc atoi(), version 2.0.1

#34111
From: Leo de Wit
Date: Fri, 16 Sep 1988 11:36
37 lines
1519 bytes
In article <12562@ncoast.UUCP> btb@ncoast.UUCP (Brad Banko) writes:
|
|What is wrong with the following code?
    [some lines deleted]...
|#include <stdio.h>
|/* #include <math.h> */
|
|#define	MAXVAL	32767
|
|main(argc,argv)
|	int argc;  char *argv[];
|{
|	int i, x;
|	extern int atoi();
|
|	for (i=1; i+1<=argc; ++i) {
|		x = rand();
|		printf("%d %d %s %d %d %d\n",
|			x, i, argv[i], (double) x / MAXVAL, atoi(argv[i]),
|			(double) x / MAXVAL * atoi(argv[i]) + 1);
|	}
|
|	putchar('\n');
|}
|
|The code compiles, but produces bad (atoi()?) results... why?  Why are 
|the atoi(argv[i]) values bad (negative)?

The arguments supplied to printf() are not conforming to the format:
(double) x / MAXVAL is of type double (probably 8 bytes on the stack),
while you try to print it as an integer (%d) (2 bytes in mwc ?). So the
first three arguments print correctly, but the last three are taken
wrongly from the stack, and besides are interpreted wrong (as integer,
but they are double,int, double. Using a cast (int)(double expr.) for the
double expressions should solve your problem.

          Leo.
Technical Details
Message-ID: <808@philmds.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!mcvax!hp4nl!philmds!leo
References: <12562@ncoast.UUCP>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!mcvax!hp4nl!philmds!leo
From: leo@philmds.UUCP (Leo de Wit)
Newsgroups: comp.sys.atari.st
Subject: Re: problem with mwc atoi(), version 2.0.1
Message-ID: <808@philmds.UUCP>
Date: 16 Sep 88 11:36:44 GMT
References: <12562@ncoast.UUCP>
Reply-To: leo@philmds.UUCP (Leo de Wit)
Distribution: comp
Organization: Philips I&E DTS Eindhoven
Lines: 37