Newsgroups: fj.lang.c
Path: galaxy.trc.rwcp.or.jp!coconuts.jaist!wnoc-tyo-news!etlnews.etl.go.jp!news.trc!nf5.iij.ad.jp!nr0.iij.ad.jp!news.iij.ad.jp!rim.or.jp!tamaru-news!kuee-news!kuis-news!sakura.kudpc!sakunami!ayashi!kaneko
From: kaneko@ccedu.sendai-ct.ac.jp (Yutaka Kaneko)
Subject: Re: [Q] about a format of fscanf statement for FORTRAN data
X-Nntp-Posting-Host: saikachi
Message-ID: <E912Jo.9p9@ayashi.cc.sendai-ct.ac.jp>
Lines: 250
Sender: news@ayashi.cc.sendai-ct.ac.jp (SNCT NetNews Manager)
Organization: Sendai National College of Technology
X-Newsreader: mnews [version 1.18PL3] 1994-08/01(Mon)
References: <mori-2104971946380001@senna.abiko.denken.or.jp>
	<5jh511$ps9@sunglow.eds.ecip.nagoya-u.ac.jp>
Date: Tue, 22 Apr 1997 07:09:23 GMT
Xref: galaxy.trc.rwcp.or.jp fj.lang.c:3951
X-originally-archived-at: http://galaxy.rwcp.or.jp/text/cgi-bin/newsarticle2?ng=fj.lang.c&nb=3951&hd=a
X-reformat-date: Mon, 18 Oct 2004 15:18:22 +0900
X-reformat-comment: Tabs were expanded into 4 column tabstops by the Galaxy's archiver. See http://katsu.watanabe.name/ancientfj/galaxy-format.html for more info.

  $B6b;R!w@gBfEEGH$G$9!#(B

In article <5jh511$ps9@sunglow.eds.ecip.nagoya-u.ac.jp>
n970801d@eds.ecip.nagoya-u.ac.jp writes:
>> In article <mori-2104971946380001@senna.abiko.denken.or.jp>
>> mori@criepi.denken.or.jp (Nobuhito Mori) $B$5$s(Bwrote:
>> >> $B;X?tItJ,$,(BFORTRAN$B$H(BC$B$G0[$J$k$N$G(B
>> >> fscanf(fio,"%15.7e",x);
>> >> $B$H$7$F$bFI$a$J$$$N$G:$$C$F$$$^$9!%(B
>> 
>> .3141593+201$B$H$+$=$&$$$&?tCM$K$J$C$F$$$k$s$G$9$+(B?

  $B$H$$$&$o$1$G!"(B

    1.23e+12
    1.23d+12
    1.23+12
    1.23-12
    1.23k(kiro, 10^3)

$B$H$$$C$?J8;zNs$r(Bdouble$B7?$KD>$94X?t$r:n$C$F$_$^$7$?!#;X?tIt$O(B
e, d, E, D$B$KB3$$$F@0?t$r=q$$$F$/$@$5$$!#Jd=uC10L$H$7$F;H$($k(B
$BJ8;z$O%=!<%9$r;2>H$7$F$/$@$5$$!#(B

$B$A$J$_$K!"(B

    +Inf
    +Infinity
    +??????.???

$B$J$I$OL58BBg$rJV$7!"$$$:$l$K$b$"$F$O$^$i$J$$J8;zNs$N>l9g$O!"(B
NaN$B$rJV$7$^$9!#(B

  
  1$B9T$KCM$,(B1$B$D$7$+=q$+$l$F$$$J$1$l$P!"%j%9%H(B1$B$N$h$&$K;H$$$^$9!#(B

--- $B%j%9%H(B1 ----------------------------
    char buf[256];
    double x;

    while(fgets(buf, 256, stdin) != EOF) {
x = zatof(buf);
...
    }
----------------------------------------

  1$B9T$KCM$,(B4$B$D=q$+$l$F$$$l$P!"%j%9%H(B2$B$N$h$&$K;H$$$^$9!#(B

--- $B%j%9%H(B2 ----------------------------
    char buf[256];
    double x[4];
    char *p;

    while(fgets(buf, 256, stdin) != EOF) {
p = buf;
x[0] = zstrtod(p, &p);
x[1] = zstrtod(p, &p);
x[2] = zstrtod(p, &p);
x[3] = zstrtod(p, &p);
    }
----------------------------------------

  1$B9T$KCM$,(B4$B$D=q$+$l$F$$$F!"(B','$B$G6h@Z$i$l$F$$$l$P!"<!$NDL$j(B

--- $B%j%9%H(B3 ----------------------------
    char buf[256];
    double x[4];
    char *p;

    #define skipcm(p)while((isspace(*p)) || (p==',')) p++;

    while(fgets(buf, 256, stdin) != EOF) {
p = buf;
x[0] = zstrtod(p, &p); skipcm(p);
x[1] = zstrtod(p, &p); skipcm(p);
x[2] = zstrtod(p, &p); skipcm(p);
x[3] = zstrtod(p, &p);
    }
----------------------------------------

  $BF~NO%(%i!<$N8!=P$NH=Dj$OE,Ev$KDI2C$7$F$/$@$5$$!#(B

  
  $B$J$*!"$3$l$i$N4X?t$rMxMQ$9$kA0$K!"(Bminit()$B$r8F$s$G!"(Binf,
nan$B$N3FJQ?t$r=i4|2=$7$F$/$@$5$$!#(Bminit()$B$NCf$G$O!"L58BBg5Z$S(B
NaN$B$r:n$j=P$90Y$N1i;;$r$*$3$J$C$F$$$k$N$G!"$3$N1i;;$K$h$j!"(B
$B=hM}7O$K$h$C$F$O!"7Y9p%a%C%;!<%8$,I=<($5$l$?$j!"%W%m%0%i%`$,(B
$B0[>o=*N;$9$k$+$b$7$l$^$;$s!#(B

\begin{$BL5BLOC(B}
    zstrtod()$B$O$J$s$H(B90$B9T$b$"$k$7!"(Bgoto$B$r;H$C$?$j$7$F$$$k$N(B
    $B$G!"$*$;$8$K$bNI$$%W%m%0%i%`$H$O8@$($^$;$s!#$H$/$K!"(Bcase
    $B%i%Y%k$KB3$/%3!<%I$N$"$H$K(Bbreak$BJ8$,$J$+$C$?$j$9$k$N$G!"(B
    $B%W%m%0%i%`$NFI$_Fq$5$KNX$r$+$1$F$$$^$9!#(B

    $B%A%'%C%/$r%5%\$C$F$$$k$?$a!"(B`123+'$B$@$N(B`1.23e+'$B$@$N$^$GDL(B
    $B$C$F$7$^$$$^$9!#$^$?!"Id9f$KB3$-(Bi$B$NJ8;z$,8+$D$+$k$HL58B(B
    $BBg$@$H2r<a$7$F$$$k$N$G!"(B`+info'$B$H$$$C$?J8;zNs$OL58BBg$@(B
    $B$H2r<a$5$l$^$9!#(B

    zatof("") $B$,(BNaN$B$rJV$9$N$O!">l9g$K$h$C$F$O;H$$$E$i$$$+$b(B
    $B$7$l$J$$!#$G$b!"JQ99$O4JC1$@$m$&$+$i:$$k?M$OD>$7$F;H$C$F(B
    $B$/$@$5$$!#(B

    "+5+4+3+2"$B$H$$$C$?J8;zNs$+$i!"(Bzstrtod()$B$GCM$r(B2$B$D@Z$j=P$9(B
    $B$H!"(B"5e+3", "3e+2"$B$H$$$&CM$,F@$i$l$^$9!#$3$l$O!"%f!<%6$N(B
    $B0U?^$KH?$7$?CM$G$"$k2DG=@-$,9b$$!#(B

\end{$BL5BLOC(B}

$B$G$O!"%=!<%9%j%9%H$r$P!#(B

$B;29MJ88%(B
    $B1|B<@2I'!"!V(BC$B8@8l$K$h$k%"%k%4%j%:%`<-E5!W!"5;=QI>O@<R!"(B1991$BG/(B
  
--- cut here --- cut here --- cut here --- cut here ---
#include <stdio.h>
#include <ctype.h>
#include <math.h>

double inf, nan;

#define issign(c) (((c)=='-')||((c)=='+'))
#define sign2val(c) ((c)=='-')?(-1):(1)

double zstrtod(s, p)
    char *s;
    char **p;
{
    double x, a;
    int sign, sign2, u;

    if (p!=NULL) *p = s;

    /* $B6uGr$NFI$_Ht$P$7(B */
    while(isspace(*s)) s++;

    /* $BId9f$NH=Dj(B */
    if (issign(*s)) {
        sign = sign2val(*s);
s++;
    }

    /* $BL58BBg!"(BNaN$B$N=hM}(B */
    if (!isdigit(*s) && (*s!='.')) {
if ((*s=='i') || (*s=='I')) {
    while(isalpha(*s)) s++;
} else if (*s=='?') {
    while ((*s=='?') || (*s=='.')) s++;
} else {
    return nan;
}
if (p!=NULL) *p = s;
return (sign < 0)?(-inf):(inf);
    }

    /* $B@0?tIt$N=hM}(B */
    if (isdigit(*s)) {
x = *s-'0';
while(s++, isdigit(*s)) {
    x = 10.0*x + (*s-'0');
}
    } else {
x = 0.0;
    }

    /* $B>/?tIt$N=hM}(B */
    if (*s == '.') {
        a = 1.0;
        while(s++, isdigit(*s)) {
            a /= 10;
            x += a * (*s-'0');
        }
    }

    /* $B;X?tIt$*$h$SJd=uC10L(B */
    u = 0; sign2= 1;
    switch (*s) {
case 'p': u = -12; s++; break;
case 'n': u =  -9; s++; break;
case 'u': u =  -6; s++; break;
case 'm': u =  -3; s++; break;
case 'c': u =  -2; s++; break;
case 'h': u =   2; s++; break;
case 'k': u =   3; s++; break;
case 'M': u =   6; s++; break;
case 'G': u =   9; s++; break;
case 'T': u =  12; s++; break;
case '-':
    sign2 = -1; 
case '+':
    s++;
    goto l1;
case 'e': case 'd':
case 'E': case 'D':
    s++;
    if (issign(*s)) {
sign2 = sign2val(*s);
s++;
    }
l1:
    if (!isdigit(*s)) break;
    u = *s-'0';
    while(s++, isdigit(*s)) {
u = u*10 + (*s-'0');
    }
    u *= sign2;
    break;
default:
    break; /* nothing */
    }
    if (p!=NULL) *p = s;
    x *= pow(10.0, (double)u);
    return (sign < 0)?(-x):(x);
}

double zatof(s)
    char *s;
{
    return zstrtod(s, NULL);
}

minit()
{
    inf = 1.0/0.0;
    nan = inf/inf;
}

#ifdef TEST
main(c, v)
    int c;
    char **v;
{
    double x;
    int i;
    char *p;

    minit();
    for(i=1; i<c; i++) {
x = zstrtod(v[i], &p);
printf("argv[%2d] = %g <%s>\n", i, x, p);
    }
}
#endif
--- cut here --- cut here --- cut here --- cut here ---

double x,y,z=1.8;main(a,b){x=(time( /*       $B6b;R(B $BM5(B(Yutaka Kaneko)          */
0)%935)/472;while(!0){y=x;x=2-z*(x- /* Sendai National College of Technology */
1)*(x-1);a=(x*631);a%=78;b=(y*95);b /*     kaneko@cc.sendai-ct.ac.jp         */
%=24;printf("\033[%d;%dHx\n",b,a);}}/*Evanx08,Megax05,Escax07,Fushx16,WedPx07*/
